作者yinzhiping (志平)
看板ForeignEX
標題[舉手] 請問MT4的OrderSend函數SL/TP設定
時間Thu Sep 13 21:34:06 2018
各位版大好
想請問MT4的新手問題,反覆測試仍無解
1. 原本想達到的效果:
買單送出,停損掛日K低點,賣單掛日K高點
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,mktifL,Ask+tp*Point,"",56,0,Blue);
其中第6,第7個參數分別是 6.停損 7.停利
2. 目前作法及矛盾點:
目前是用在OnTick()裡面設的double mktifH, mktifL自設變數 :
mktifH=NormalizeDouble(MarketInfo(NULL,MODE_HIGH),5); // 今日高
mktifL=NormalizeDouble(MarketInfo(NULL,MODE_LOW),5); // 今日低
但跑EA就是SL掛不上去不知道為什麼(無論有無標準化位數都一樣)
另外用了自設變數測試就可以, 下面的MA31max, MA31med, MA31min (一樣double)
不知道為什麼這樣就可以,剛剛就不行,完全不明白中間的邏輯
MaList[0]=ma5d;
MaList[1]=ma10d;
MaList[2]=ma20d;
ArraySort(MaList,WHOLE_ARRAY,0,MODE_DESCEND);
MA31max=MaList[0];
MA31med=MaList[1];
MA31min=MaList[2];
3. 要問的問題:
1)為什麼會這樣 哭哭
2)追加:如果我在OrderSend以後馬上用OrderSelect OrderModify改sl tp
是有辦法辦到的嗎?
因為假設單一多用for迴圈找就麻煩多了
剛接觸,遇到無數瓶頸
懇請各位版上先進技術指導
大感謝 T T
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.250.176.113
※ 文章網址: https://webptt.com/m.aspx?n=bbs/ForeignEX/M.1536845648.A.D79.html
1F:→ yinzhiping: 阿,忘了說是H1或M30策略,但變數是日高日低5/10/20MA 09/13 21:39
2F:推 vesta9: MarketInfo 第一個參數換成 _Symbol 09/14 02:50
3F:→ n33222: 有顯示ERROR嗎? 你試試看用F5一條一條跑跑看 09/14 15:28
4F:推 ducati5566: 有compile error嗎?用High[0], Low[0]看看 09/14 16:15
5F:→ n33222: 這有幾點可能會發生,第一就是停損數值錯誤,這種偵錯法你 09/14 20:39
6F:→ n33222: 可以使用PRINT來確認數字對不對,或是停損離下單點位有時 09/14 20:39
7F:→ n33222: 近,另外一種可能就是你的ORDERSEND的邏輯指令錯誤,根本 09/14 20:40
8F:→ n33222: 不進去,沒看到ERROR代碼或是語法很難判斷,最好辦法你使 09/14 20:40
9F:→ n33222: 用F5和F9調試,一行一行去檢驗跑到哪裡就跳掉了。 09/14 20:41
回覆: 有Print過,沒Error, 回測OrderSend沒問題,只是停損掛不上去(TP可以)
換另外一組自訂的double就可以,也就是文中的三均線
參數我用NULL, Symbol(), _Symbol Print都沒錯,但就是不能掛 QQ
最後解法如下:
mktifH=iMA(NULL,1440,1,0,MODE_SMA,PRICE_HIGH,0);
//NormalizeDouble(MarketInfo(Symbol(),MODE_HIGH),6); // 今日高
mktifL=iMA(NULL,1440,1,0,MODE_SMA,PRICE_LOW,0);
//NormalizeDouble(MarketInfo(Symbol(),MODE_LOW),6); // 今日低
有成功掛上,但還是很納悶中間的邏輯到底是什麼 @ @
另外n33222之前PO的模板對新手幫助很多,我都是用您的改的,在此感謝。
※ 編輯: yinzhiping (49.218.115.104), 09/14/2018 23:43:49
10F:推 n33222: 明天幫你看 09/15 00:53