作者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/cn.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