COCO研究院

 找回密碼
 註冊
搜索
查看: 5008|回復: 6

新手問題~出現{例外} 浮點運算除以0

[複製鏈接]
發表於 17-8-24 21:30 | 顯示全部樓層 |閱讀模式
本帖最後由 abc889900 於 17-8-24 21:31 編輯

以下是原始碼:
VAR1:=(HHV(HIGH,9)-CLOSE)/(HHV(HIGH,9)-LLV(LOW,9))*100-70;
VAR2:=SMA(VAR1,9,1)+100;
VAR3:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
VAR4:=SMA(VAR3,3,1);
VAR5:=SMA(VAR4,3,1)+100;
VAR6:=VAR5-VAR2;
VAR7:=IF(VAR6>21,VAR6-21,0);
STICKLINE(REF(VAR7,1)<VAR7,VAR7,REF(VAR7,1),3,0),COLORRED;
STICKLINE(REF(VAR7,1)>VAR7,VAR7,REF(VAR7,1),3,0),COLORGREEN;
紅買綠賣,COLORRED;

VARM1:=SMA((CLOSE-LLV(LOW,5))/(HHV(HIGH,5)-LLV(LOW,5))*100,3,1);
VARM2:=3*VARM1-2*VARM1;
DRAWICON(CROSS(VARM2,25),VAR7-10,1);

VAR1M:=(HHV(H,9)-C)/(HHV(H,9)-LLV(L,9));
VAR2M:=(C-LLV(L,9))/(HHV(H,9)-LLV(L,9));
VAR3M:=SMA(SMA(VAR2M,3,1),3,1);
VAR4M:=(VAR3M-SMA(VAR1M,9,1))-0.5;
VAR5M:=IF(VAR4M>0.00,VAR4M,0.00);
VAR6M:=REF(VAR5M,1);
注意風險:120,COLORGREEN;
DRAWICON(CROSS(VAR6M,VAR5M),注意風險+20,2);

我把它修改為 Powerlanguage 語言,以下是我修改後的程式碼:-
但我套用在MultiCharts 中,出現了

{例外}
浮點運算除以0。
  1. <div><font style="background-color: rgb(255, 255, 255);">inputs:
  2. OverSold(-120),
  3. OverBought(120);</font></div><div><font style="background-color: rgb(255, 255, 255);">variables:
  4. var0( 0 ),
  5. var1( 0 ),
  6. var2( 0 ),
  7. var3( 0 ),
  8. var4( 0 ),
  9. var5( 0 ),
  10. var6( 0 ),
  11. var7( 0 ),
  12. var8( 0 ),
  13. var9( 0 ),
  14. var10( 0 ),
  15. var11( 0 ),
  16. var12( 0 ),
  17. var13( 0 ),
  18. var14( 0 ),
  19. var15( 0 );</font></div><div><font style="background-color: rgb(255, 255, 255);">
  20. var1=(HIGHD(9)-CLOSE)/((HIGHD(9)-LOWD(9))*100-70);
  21. var2=SMA(var1,9)+100;
  22. var3=(CLOSE-LOWD(9))/((HIGHD(9)-LOWD(9))*100);
  23. var4=SMA(var3,3);
  24. var5=SMA(var4,3)+100;
  25. var6=var5-var2;
  26. If var6>21 then var7 = (var6-21) else var7=0;
  27. var8=var7-var7[1];
  28. Plot1(var8);
  29. If var8> 0 then SetPlotColor(1,red)
  30. else
  31. SetPlotColor(1,green);</font></div><div><font style="background-color: rgb(255, 255, 255);">var9=SMA((CLOSE-LOWD(5))/(HIGHD(5)-LOWD(5))*100,3);
  32. var10=3*var9-2*var9;</font></div><div><font style="background-color: rgb(255, 255, 255);">var11=(HIGHD(9)-C)/(HIGHD(9)-LOWD(9));
  33. var12=(C-LOWD(9))/(HIGHD(9)-LOWD(9));
  34. var13=SMA(SMA(var12,3),3);
  35. var14=(var13-SMA(var13,9))-0.5;
  36. if var14>0.00 then var14=var13 else var14=0.00;
  37. var15=var14[1];</font></div><div><font style="background-color: rgb(255, 255, 255);">Condition1=var10 crosses over 25;
  38. if Condition1 then
  39. Print("Buy")
  40. else
  41. begin
  42. Condition1=var10[1] crosses over var10[0];
  43. if Condition1 then
  44. Print("Sell");
  45. End;</font></div><div>
  46. </div>
複製代碼


及SMA 函數如下:
Inputs: Price(NumericSeries), Length(NumericSimple);
Variables : Sum(0), Counter(0);
If CurrentBar = 1 Then Begin
Sum= 0;
For Counter = 0 To Length - 1 Begin
Sum= Sum+ Price[Counter];
End ;
SMA = Sum / Length;
End;
If CurrentBar > 1 Then Begin
Sum = Sum[1] - SMA[1] + Price;
SMA = Sum / Length;
end ;

可以幫忙看看是出現甚麼問題嗎?

另外,有沒有人可以把原始的程式碼轉換為Powerlanguage,待我看看有甚麼分別及有沒有可以優化的地方。

謝謝


發表於 17-8-24 22:34 來自手機 | 顯示全部樓層
SMA 在 powerlanguage裡,用 average來替換
發表於 17-8-25 00:31 | 顯示全部樓層
本帖最後由 hohooh 於 17-8-25 00:41 編輯
  1. if HighD(9)-LowD(9)<>0 then begin
  2.         var1=(HIGHD(9)-CLOSE)/(HIGHD(9)-LOWD(9))*100-80;
  3.         var2=SMA(var1,9)+50;
  4.         var3=(CLOSE-LOWD(9))/(HIGHD(9)-LOWD(9))*100;
  5.         var4=SMA(var3,3);
  6.         var5=SMA(var4,3)+100;
  7.         var6=var5-var2;
  8. end;
複製代碼
這樣修吧
但原始程式碼裡的HHV和REF是什麼意思
我覺得HHV應該是Highest(H,9), 不是HighD(9)的意思;  總之都試試吧
績效不錯再分享給我們看看





 樓主| 發表於 17-8-25 07:21 | 顯示全部樓層
hohooh 發表於 17-8-25 00:31
這樣修吧
但原始程式碼裡的HHV和REF是什麼意思
我覺得HHV應該是Highest(H,9), 不是HighD(9)的意思;  總之都 ...

HHV(HIGH,9) = 包括現在在內的 9支陰陽燭最高價位。

REF(VAR7,1) 是指VAR7 前支陰陽燭

STICKLINE(REF(VAR7,1)<VAR7,VAR7,REF(VAR7,1),3,0),COLORRED; 的意思為,
VAR7[1]<VAR7, 那捧型圖的長度就是由VAR7至VAR7[1],(那長度就是VAR7-VAR7[1])

 樓主| 發表於 17-8-25 08:29 | 顯示全部樓層



我把上面的HIGHD(9) 改為HIGHEST(H,9)及LOWD(9) 改為LOWEST(L,9),錯誤問題解決了
  1. inputs:
  2. OverSold(-120),
  3. OverBought(120);

  4. variables:
  5. var0( 0 ),
  6. var1( 0 ),
  7. var2( 0 ),
  8. var3( 0 ),
  9. var4( 0 ),
  10. var5( 0 ),
  11. var6( 0 ),
  12. var7( 0 ),
  13. var8( 0 ),
  14. var9( 0 ),
  15. var10( 0 ),
  16. var11( 0 ),
  17. var12( 0 ),
  18. var13( 0 ),
  19. var14( 0 ),
  20. var15( 0 );


  21. var1=(HIGHEST(H,9)-CLOSE)/((Highest(H,9)-LOWEST(L,9))*100-70);
  22. var2=SMA(var1,9)+100;
  23. var3=(CLOSE-LOWEST(L,9))/((HIGHEST(H,9)-LOWEST(L,9))*100);
  24. var4=SMA(var3,3);
  25. var5=SMA(var4,3)+100;
  26. var6=var5-var2;
  27. If var6>21 then var7 = (var6-21) else var7=0;
  28. var8=var7-var7[1];
  29. Plot1(var8);
  30. If var8> 0 then SetPlotColor(1,red)
  31. else
  32. SetPlotColor(1,green);

  33. var9=SMA((CLOSE-LOWEST(L,5))/(HIGHEST(H,5)-LOWEST(H,5))*100,3);
  34. var10=3*var9-2*var9;

  35. var11=(HIGHEST(H,9)-C)/(HIGHEST(H,9)-LOWEST(L,9));
  36. var12=(C-LOWEST(L,9))/(HIGHEST(H,9)-LOWEST(L,9));
  37. var13=SMA(SMA(var12,3),3);
  38. var14=(var13-SMA(var13,9))-0.5;
  39. if var14>0.00 then var14=var13 else var14=0.00;
  40. var15=var14[1];

  41. Condition1=var10 crosses over 25;
  42. if Condition1 then
  43. Print("Buy")
  44. else
  45. begin
  46. Condition1=var10[1] crosses over var10[0];
  47. if Condition1 then
  48. Print("Sell");
  49. End;

複製代碼
最後結果出了一條橫線。
不知道那裡出現問題,大家可以幫忙看看那裡出現問題

數值問題.png
發表於 17-8-25 14:49 | 顯示全部樓層
直接看kd更清楚
2.gif
發表於 17-9-5 13:20 | 顯示全部樓層
abc889900 發表於 17-8-25 08:29
我把上面的HIGHD(9) 改為HIGHEST(H,9)及LOWD(9) 改為LOWEST(L,9),錯誤問題解決了
最後結果出了一條橫線 ...
  1. If var6>21 then var7 = (var6-21) else var7=0;
  2. var8=var7-var7[1];
  3. Plot1(var8);
複製代碼
Var6 always <21
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-5 08:16

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |