老師,
你好,能否幫忙看看我這段代碼錯誤在哪里?怎么修改都沒有信號發生?謝謝。
variable:Rsum=0; //Rsum紅柱總和
variable:Rlong=0; //Rlong最長紅柱
variable:Rhigh=0; //Rhigh紅柱區域最低價
//MACD指標
P:=26;
S:=12;
M:=9;
DIFF := EMA(CLOSE,S) - EMA(CLOSE,P);
DEA := EMA(DIFF,M);
macd := 2*(DIFF-DEA);
Rnum:=barslast(ref(macd<0,1) and macd>0);//綠轉紅
Rbnum:=barslast(ref(macd>0,1) and macd<0);//紅轉綠
if ref(macd,1)<0 and macd>0 then
begin
Rsum:=0; //紅柱開始,清0
Rlong:=0; //紅柱開始,清0
Rhigh:=HIGH; //紅柱開始,初始化
end
if macd>0 then
begin
Rsum:=Rsum+macd; //累加
if abs(macd)<abs(Rlong) then Rlong:=macd;//如果紅柱更長,則記錄
if HIGH>Rhigh then Rhigh:=HIGH; //如果價格更高,則記錄
end
rnumb:=max(Rnum,Rbnum)+1;
rcon1:=abs(Rsum)<abs(ref(Rsum,rnumb));//面積小于前一波--面積沒創新低
rcon2:=abs(Rlong)<abs(ref(Rlong,rnumb));//柱子長度小于前一波----長度沒創新低
rcon3:=Rhigh<ref(Rhigh,rnumb);//價格小于前一波-----價格創新低
//當紅柱開始收縮時(牛市即將結束,可能反轉向上(或高位盤整)),如果出現低背離,則少量建倉
if all(macd>0,3) and ref(macd,1)>macd and ref(macd,1)>ref(macd,2) then
begin
if rcon1 and rcon2 and rcon3 then buyshort(1,1,market);//低背離,面積沒創新低,長度沒創新低,價格創新低
end
//紅柱消失、綠柱開始放出時(上漲行情(或高位盤整)已經結束),如果出現低背離,則加倉
if ref(macd>0,1) and macd<0 then
begin
if rcon1 and rcon2 and rcon3 then 加:buyshort(1,1,market);//低背離,面積沒創新低,長度沒創新低,價格創新低
end
if abs(macd)<abs(Rlong) then Rlong:=macd;//如果紅柱更長,則記錄
這一句看你的意思應該是
if abs(macd)>abs(Rlong) then Rlong:=macd;//如果紅柱更長,則記錄
謝謝老師,