奇狐社區論壇
在這個頁面顯示本主題全部的 13 個文章

奇狐社區論壇 (http://www.chiefox.com.tw/bbs/index.php)
- 問題交流 (http://www.chiefox.com.tw/bbs/forumdisplay.php?forumid=28)
-- [問題] 請問如何編寫, 感謝感謝~^^ (http://www.chiefox.com.tw/bbs/showthread.php?threadid=23729)


由 fantast 在 2023-08-02 22:48 發表:

[問題] 請問如何編寫, 感謝感謝~^^

請問我想寫一個程式下單的code, 但我是奇狐新手, 想請教我的邏輯如下, 想請版大幫忙~感謝感謝~

多單進場:突破五分鐘開盤第一根K棒高點
多單停損:收盤跌破五分鐘第一根K棒低點 多單平倉
多單獲利平倉: 利潤大於 50點(設定參數) 且收盤小於前2根(設定參數) K棒 的低點 多單平倉
多單未達獲利平倉: 當時間=13:30 (設定參數) 時 多單平倉

空單進場:跌破五分鐘開盤第一根K棒低點
空單停損:收盤突破五分鐘第一根K棒高點 空單平倉
空單獲利平倉: 利潤大於 50點(設定參數) 且收盤大於前2根(設定參數) K棒 的高點 空單平倉
空單未達獲利平倉: 當時間=13:30 (設定參數) 空單平倉

ps: 上述進場多單, 空單, 平倉 也需要顯示於圖表上, 參數部份我想要可以設定跑回測看結果

以上需求, 可否請版大幫忙一下, 感謝感謝^^


由 cgjj 在 2023-08-03 14:47 發表:

回覆: [問題] 請問如何編寫, 感謝感謝~^^

引用:
最初由 fantast 發表
請問我想寫一個程式下單的code, 但我是奇狐新手, 想請教我的邏輯如下, 想請版大幫忙~感謝感謝~

多單進場:突破五分鐘開盤第一根K棒高點
多單停損:收盤跌破五分鐘第一根K棒低點 多單平倉
多單獲利平倉: 利潤大於 50點(設定參數) 且收盤小於前2根(設定參數) K棒 的低點 多單平倉
多單未達獲利平倉: 當時間=13:30 (設定參數) 時 多單平倉

空單進場:跌破五分鐘開盤第一根K棒低點
空單停損:收盤突破五分鐘第一根K棒高點 空單平倉
空單獲利平倉: 利潤大於 50點(設定參數) 且收盤大於前2根(設定參數) K棒 的高點 空單平倉
空單未達獲利平倉: 當時間=13:30 (設定參數) 空單平倉

ps: 上述進場多單, 空單, 平倉 也需要顯示於圖表上, 參數部份我想要可以設定跑回測看結果

以上需求, 可否請版大幫忙一下, 感謝感謝^^



您描述的此策略並無真正的停損
它是直接反手做

原碼:
MN:=2; 控利:=50; 強出時間:=133000; DECK:=tradedate<>ref(tradedate,1); DESP:=barslast(DECK); MHH:=ref(HHV(H,MN),1); MLL:=ref(LLV(L,MN),1); 強出:=time>=強出時間; //此為K棒時間(非電腦時間) 多進:=C>ref(H,DESP) and 強出=0 or barpos=0; 空進:=C<ref(L,DESP) and 強出=0 or barpos=0; 進出:C*0 NOAXIS; 多空:=0; //1.多 -1.空 0.無 CC:=C; 進價:=0; 進向:=多進-空進; 盈虧:c*0 linethick; for i= 1 to datacount do begin if 多空=0 then begin 多空:=進向[i]; 進出[i]:=多空; if 多空<>0 then 進價:=CC[i]; end else if 多空<>0 then begin 盈虧[i]:=(CC[i]-進價)*多空; if 強出[i] then begin 進出[i]:=多空*4; 多空:=0; end else if 多空<>進向[i] and 進向[i]<>0 then begin 進出[i]:=-多空*3; 多空:=-多空; 進價:=CC[i]; end else if 盈虧[i]>=控利 then begin if i>=MN then begin 進出[i]:=((多空=1 and CC[i]<MLL[i])-(多空=-1 and CC[i]>MHH[i]))*2; if ABS(進出[i])=2 then 多空:=0; end; end; end; end; // [進出] 這變數值代表意義如下: // 1.多單進場, 2.多控利出, 3.空轉多, 4.多強出 // -1.空單進場,-2.空控利出,-3.多轉空, -4.空強出


由 fantast 在 2023-08-03 20:35 發表:

感謝版大, 確實好像只有反手不是真正的停損, 感謝感謝~


由 fantast 在 2023-08-07 07:26 發表:

回覆: 回覆: [問題] 請問如何編寫, 感謝感謝~^^

想問一下版大, 如果不用迴圈有辦法寫嗎? 想問一下有沒有比較容易理解的寫法呢?


由 cgjj 在 2023-08-07 08:27 發表:

回覆: 回覆: 回覆: [問題] 請問如何編寫, 感謝感謝~^^

引用:
最初由 fantast 發表
想問一下版大, 如果不用迴圈有辦法寫嗎? 想問一下有沒有比較容易理解的寫法呢?


以此例來說,因為前一次出場,會影響接續進場的位置,故需要以迴圈來完成(需要累算)


由 cgjj 在 2023-08-07 08:42 發表:

這一行
進出[i]:=((多空=1 and CC[i]<MLL[i])-(多空=-1 and CC[i]>MHH[i]))*2;

相當於
if 多空=1 and CC[i]<MLL[i] then 進出[i]:=2;
if 多空=-1 and CC[i]>MHH[i] then 進出[i]:=-2;

只是把它優化而已


由 fantast 在 2023-08-10 08:21 發表:

我還有一些問題不太懂得部分
1.進出:C*0 NOAXIS 和 盈虧:c*0 linethick; 而C*0 不是等於0嗎?
2.我想在進場部分, 如果再加上一個條件, 在原有多進條件下, 加上收盤大於10MA (設定參數)才進多單, 空進條件下, 加上收盤小於10MA (設定參數), 才進空單
3.停利部分, 在原有控利部分, 多單停利我想加上收盤小於20MA (設定參數)才平倉多單, 空單停利我想加上收盤小於20MA (設定參數)才平倉空單

這樣應該就有真正意義上的停利停損了


由 cgjj 在 2023-08-10 11:27 發表:

引用:
最初由 fantast 發表
我還有一些問題不太懂得部分
1.進出:C*0 NOAXIS 和 盈虧:c*0 linethick; 而C*0 不是等於0嗎?
2.我想在進場部分, 如果再加上一個條件, 在原有多進條件下, 加上收盤大於10MA (設定參數)才進多單, 空進條件下, 加上收盤小於10MA (設定參數), 才進空單
3.停利部分, 在原有控利部分, 多單停利我想加上收盤小於20MA (設定參數)才平倉多單, 空單停利我想加上收盤小於20MA (設定參數)才平倉空單

這樣應該就有真正意義上的停利停損了



C*0 就是 Close*0
Close 是收盤價,其為數列,N根K棒就有N個元素在其中
C*0 是為了得到一個與K棒相等範圍的零值數列

原碼:
MN:=2; 控利:=50; 強出時間:=133000; M1:=10; M2:=20; DECK:=tradedate<>ref(tradedate,1); DESP:=barslast(DECK); MHH:=ref(HHV(H,MN),1); MLL:=ref(LLV(L,MN),1); 進MA:=MA(C,M1); 停MA:=MA(C,M2); 強出:=time>=強出時間; //此為K棒時間(非電腦時間) 多進:=C>ref(H,DESP) and C>進MA and 強出=0 or barpos=0; 空進:=C<ref(L,DESP) and C<進MA and 強出=0 or barpos=0; 停利:=(C<停MA)-(C>停MA); 進出:C*0 NOAXIS; 多空:=0; //1.多 -1.空 0.無 CC:=C; 進價:=0; 進向:=多進-空進; 盈虧:c*0 linethick; for i= 1 to datacount do begin if 多空=0 then begin 多空:=進向[i]; 進出[i]:=多空; if 多空<>0 then 進價:=CC[i]; end else if 多空<>0 then begin 盈虧[i]:=(CC[i]-進價)*多空; if 強出[i] then begin 進出[i]:=多空*4; 多空:=0; end else if 多空<>進向[i] and 進向[i]<>0 then begin 進出[i]:=-多空*3; 多空:=-多空; 進價:=CC[i]; end else if 盈虧[i]>=控利 then begin if i>=MN and i>=M2 then begin if 多空=停利[i] then begin 進出[i]:=((多空=1 and CC[i]<MLL[i])-(多空=-1 and CC[i]>MHH[i]))*2; if ABS(進出[i])=2 then 多空:=0; end; end; end; end; end; // [進出] 這變數值代表意義如下: // 1.多單進場, 2.多控利出, 3.空轉多, 4.多強出 // -1.空單進場,-2.空控利出,-3.多轉空, -4.空強出


由 fantast 在 2023-08-12 11:33 發表:

感謝版大指點, 來拜讀研究一下, 大大感謝~~


由 fantast 在 2023-08-15 07:45 發表:

版大 在跟您指導一下
這段我有點看不懂~

停利:=(C<停MA)-(C>停MA);

想請您幫忙解析一下


由 cgjj 在 2023-08-15 08:28 發表:

引用:
最初由 fantast 發表
版大 在跟您指導一下
這段我有點看不懂~

停利:=(C<停MA)-(C>停MA);

想請您幫忙解析一下



相當於
if C<停MA then 停利:=1; //多停利
if C>停MA then 停利:=-1; //空停利


由 fantast 在 2023-08-22 07:54 發表:

感謝版大, 這樣寫非常精簡, 但對我來說不是很好理解啦~不過看的出版大功力深厚XD


由 cgjj 在 2023-08-22 08:36 發表:

引用:
最初由 fantast 發表
感謝版大, 這樣寫非常精簡, 但對我來說不是很好理解啦~不過看的出版大功力深厚XD


不客氣^^
其實技術上還可以處理為以下這樣:(相同結果)
停利:=-SGN(C-停MA);

只是會更不易理解,故沒有採取這種寫法


全部時間均為台灣時間, 現在時間為06:11
在這個頁面顯示本主題全部的 13 個文章


Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.

簡愛洋行 製作 Copyright 2003-. All Rights Reserved.