COCO研究院

 找回密碼
 註冊
搜索
樓主: jacklcl

關於移動停損

[複製鏈接]
發表於 14-8-1 12:44 來自手機 | 顯示全部樓層
jacklcl 發表於 14-8-1 10:43
我是會即時出場
不知你的code是怎樣?

我今晚回家再post個code請教,但我想問,師兄是怎樣弄個buy字和價錢的?很方便啊!
 樓主| 發表於 14-8-1 13:35 | 顯示全部樓層
osdak 發表於 14-8-1 12:44
我今晚回家再post個code請教,但我想問,師兄是怎樣弄個buy字和價錢的?很方便啊! ...


dist = 2*ATR(10);
FirstVisibleBar = Status( "FirstVisibleBar" );
Lastvisiblebar = Status("LastVisibleBar");
for( i = Firstvisiblebar; i <= Lastvisiblebar AND i < BarCount; i++)
{
if( Buy ) PlotText( "Buy\n"+NumToStr(BuyPrice, 1.2) , i, L[ i ]-dist, colorGreen, colorYellow );
if( Sell ) PlotText( "Sell\n" +NumToStr(SellPrice, 1.2), i, H[ i ]+dist, colorRed, colorYellow );
if( Short ) PlotText( "Short\n" +NumToStr(ShortPrice, 1.2), i, H[ i ]+dist, colorBlue, colorRed );
if( Cover ) PlotText( "Cover\n"+NumToStr(CoverPrice, 1.2) , i, L[ i ]-dist, colorYellow, colorRed );

}

發表於 14-8-1 16:05 | 顯示全部樓層
師兄有空可以去解一解小弟愚昧問題嗎?

http://www.coco-in.net/thread-35754-1-1.html

小弟也是用FHSI 在做回測, 初學amibroker, 望指點.

樓上說applystop不能應用在真實交易是甚麼意思?

小弟未有用amibroker 實戰的經驗(未試過從IB或其他real time source 把實時數據導入amibroker交易, 所以有個問題想不通的:

我相信進入amibroker的實時數據都是成交價而數據都是不停更新的
假設我set了sell signal, 在市價23002時trigger我的sell signal 及以23002送出市場, 但明顯地 23002 有機會不能成交(買隊伍最高買入價可能只是23000), 所以要確保能成交, 我們是不是要設定sell price=23002-2?

那在back test 時, buy sell price 是不是要+/- some points? 相關的語句怎樣寫呢?

此外, 在user guide中的example 都是用

buy=cross(A,B);
sell=cross(B,C);
applystop(...);

這只是簡單的illustration吧, 應該要loop through 成條array的, 對應的第i 個buy/sell, short/cover, applystop element 如何寫? (我相信loop through 他們是common吧?)

感謝指點!
 樓主| 發表於 14-8-1 16:35 | 顯示全部樓層
orangelam 發表於 14-8-1 16:05
師兄有空可以去解一解小弟愚昧問題嗎?

http://www.coco-in.net/thread-35754-1-1.html

小弟都只是近這2-3個月才認真去學
以前沒學過程式語言, 所以我的語法有可能是錯的 XDD

以我所知, applystop只在回測中有用, 在真實交易是用不了的
必須把出場條件寫在AFL裡
或在IB controller裡寫也可以

真實交易裡如要確保成交可用市價單, 當然如你所說會有滑價問題
所以我才會+/- 3點去模擬滑價
AFL裡那個Buy/Sell/Short/Cover price只是模擬真實交易會成交的價位
但如你在IB是用市價下單, 則真實交易是用不到的
因為你用市價下單的話, 只要一符合條件它就會掉單出去
不過Buy/Sell/Short/Cover price可用來設限價單, 但我還在研究如何寫
設這些price要很小心, 因為有時會設了些不合理的價位, 在真實交易是沒法成交的
那你的backtest result就會高估了

不太明白你最後那個問題
applystop我很少用, 所以不太清楚
如要寫trailing stop可用knowledge base那個範例去改






發表於 14-8-1 16:40 | 顯示全部樓層
orangelam 發表於 14-8-1 16:05
師兄有空可以去解一解小弟愚昧問題嗎?

http://www.coco-in.net/thread-35754-1-1.html

我去問過customer service, 就我所理解和看CS回覆, applystop只是在backtest起作用, 於實際交易中要用equity(1)去把sell/cover signal寫回去(因為就我理解, 這些停損的signal是有別於比時出塲的signal, 所以要寫回去), 但我研究了一排, 發現好困難, 所以我覺得jack這個loop方法應該比較易理解.
 樓主| 發表於 14-8-1 17:02 | 顯示全部樓層
osdak 發表於 14-8-1 16:40
我去問過customer service, 就我所理解和看CS回覆, applystop只是在backtest起作用, 於實際交易中要用equ ...


剛才copy出來時不知為什麼少了[ i ]
以下直接copy入你AFL裡就可以了

dist = 2*ATR(10);
FirstVisibleBar = Status( "FirstVisibleBar" );
Lastvisiblebar = Status("LastVisibleBar");
for( i = Firstvisiblebar; i <= Lastvisiblebar AND i < BarCount; i++)
{
if( Buy [ i ]) PlotText( "Buy\n"+NumToStr(BuyPrice, 1.2) , i, L[ i ]-dist, colorGreen, colorYellow );
if( Sell [ i ]) PlotText( "Sell\n" +NumToStr(SellPrice, 1.2), i, H[ i ]+dist, colorRed, colorYellow );
if( Short [ i ]) PlotText( "Short\n" +NumToStr(ShortPrice, 1.2), i, H[ i ]+dist, colorBlue, colorRed );
if( Cover [ i ]) PlotText( "Cover\n"+NumToStr(CoverPrice, 1.2) , i, L[ i ]-dist, colorYellow, colorRed );
}
發表於 14-8-1 17:09 | 顯示全部樓層
jacklcl 發表於 14-8-1 17:02
剛才copy出來時不知為什麼少了[ i ]
以下直接copy入你AFL裡就可以了

hi,

我的code是下面, 可以幫忙看看嗎? 我發現我的止損線和你的有點出入, 你的可以於買入後的下一個BAR出現, 我的卻於當根出現, 而出場的arrow和時間, 也差了一個BAR, 很奇怪.....謝謝!!

stopLevelB =  (Ref(L, -1));

trailARRAYB = Null;
trailstopB = 0;

for( i = 1; i < BarCount; i++ )
{

   if( trailstopB == 0 AND Buy[ i ] )
   {
      trailstopB = stoplevelB;
   }
   else Buy[ i ] = 0; // remove excess buy signals

   if( trailstopB > 0 AND Low[ i ] < trailstopB )
   {
      Sell[ i ] = 1;
      SellPrice[ i ] = trailstopB;
      trailstopB = 0;
   }

   if( trailstopB > 0 )
   {   
      trailstopB = Max( stoplevelB, trailstopB );
      trailARRAYB[ i ] = trailstopB;
   }

}
Plot( trailARRAYB,"Buy stop", colorWhite );




 樓主| 發表於 14-8-1 17:14 | 顯示全部樓層
osdak 發表於 14-8-1 17:09
hi,

我的code是下面, 可以幫忙看看嗎? 我發現我的止損線和你的有點出入, 你的可以於買入後的下一個BAR出 ...

應該是次序問題, 這個我搞了很久才明白
試試這樣

stopLevelB =  (Ref(L, -1));

trailARRAYB = Null;
trailstopB = 0;

for( i = 1; i < BarCount; i++ )
{
   if( trailstopB > 0 )
   {   
      trailstopB = Max( stoplevelB, trailstopB );
      trailARRAYB[ i ] = trailstopB;
   }

  
   if( trailstopB > 0 AND Low[ i ] < trailstopB )
   {
      Sell[ i ] = 1;
      SellPrice[ i ] = trailstopB;
      trailstopB = 0;
   }

if( trailstopB == 0 AND Buy[ i ] )
   {
      trailstopB = stoplevelB;
   }
   else Buy[ i ] = 0; // remove excess buy signals

}
Plot( trailARRAYB,"Buy stop", colorWhite );



發表於 14-8-1 17:42 | 顯示全部樓層
jacklcl 發表於 14-8-1 17:14
應該是次序問題, 這個我搞了很久才明白
試試這樣

勁!! 我也想明白了!! 還有一個問題, 不好意思
我很用你那個buy/short arrow plus price,  但paste後不容許run, 有沒有試過?
test.PNG
 樓主| 發表於 14-8-1 17:54 | 顯示全部樓層
osdak 發表於 14-8-1 17:42
勁!! 我也想明白了!! 還有一個問題, 不好意思
我很用你那個buy/short arrow plus price,  但pas ...

前面還要plotshapes

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeDownArrow,colorRed,0,High);
PlotShapes(Short*shapeDownarrow,colorblue,0,High);
PlotShapes(Cover*shapeUparrow,colorbrown,0,Low);

順帶一提, 你那個Sellprice要小心
如果他下一根Bar open已跌過你的trailing stop
但你設了trailing stop做Sellprice
回測結果會不真實

 樓主| 發表於 14-8-1 17:56 | 顯示全部樓層
jacklcl 發表於 14-8-1 17:54
前面還要plotshapes

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);

不對, 應該不關plotshapes事的
這個我沒遇過, 要想一想
發表於 14-8-1 17:59 | 顯示全部樓層
jacklcl 發表於 14-8-1 17:56
不對, 應該不關plotshapes事的
這個我沒遇過, 要想一想

那不要浪費師兄你時間, 我會再測試一下, 找到原因再post上來.
但師兄幫個忙, 可否告之出處在那? 我去研究一下.
 樓主| 發表於 14-8-1 18:01 | 顯示全部樓層
本帖最後由 jacklcl 於 14-8-1 18:04 編輯
osdak 發表於 14-8-1 17:59
那不要浪費師兄你時間, 我會再測試一下, 找到原因再post上來.
但師兄幫個忙, 可否告之出處在那? 我去研究 ...

我知道了, 你price後少了 [ i ]
不知為什麼回貼時會消掉這個

http://www.amibroker.org/userkb/2007/04/22/plotting-trade-prices/
發表於 14-8-1 20:27 來自手機 | 顯示全部樓層
jacklcl 發表於 14-8-1 18:01
我知道了, 你price後少了 [ i ]
不知為什麼回貼時會消掉這個


哈!謝謝!BY THE WAY, 你可以考慮用buyprice = buyprice + XXX, 那你就不用每個地方都去改PRICE了
發表於 14-8-3 17:20 | 顯示全部樓層
thanks for below link.
amibroker.com/kb/2007/03/24/how-to-plot-a-trailing-stop-in-the-price-chart/
(以上這個叫做custom stop 吧)

其實是這樣的, 我說的那個loop through buy/sell 就是指上面的buy[i] 等等...
我剛看懂了裡面的code. 之前我都是用applystop function. 但如果我們想做一個 stoploss 20points + trailing stoploss 30 points 時, 應該便不能用applystop function了, 應該要自己寫個類似上面的custom stop, 對吧?

其實之前看了很久applystop及equity(1) 的用法. 但發現如果把applystop 再加上custom stop (例如上面那個custom trailing stop), 再加上equity(1) function, 便十分複雜及混亂.

不知道 jacklcl 大哥有沒有類似看法?
jacklcl 大哥是不是完全不用applystop function? 完全用custom loop的方法寫?
我估計應該在上面的custom training loss 再改良少少便可以造出
stoploss 20points + trailing stoploss 30 points 吧?

by the way, what is the commission assumption per contract you set for FHSI? I used $15 per transaction (i think if high frequency, we can pay as low as $15 somewhere)

thanks!
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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

GMT+8, 24-11-23 15:17

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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