作者ColiColi (☠Busy Life☠)
看板ForeignEX
标题[举手] MT4之MQL4语法问题
时间Fri Mar 15 16:52:03 2019
我目前着手写的程式
出场问题比较令我困扰一些
目前出场情况有四种
其中两种没什麽问题
出场後可以继续正常开新仓
另两种出场情况则不太一样
只要符合条件就会出场且
当日不会再进行任何交易
想问的是 我已写好当日交易时间的滤网
例如一天只在9~21之间开新部位
而且我把这个时间滤网是放在开新仓指令的开头 若在这段期间外会用return跳出
至於这个当日某笔止损金额达到一定程度的出场条件
我会用Bool撰写 若达到条件为True 否则为False 我也想把他放到开新仓指令的开头
也就是
if (TimeCurrent()<StrToTime("09:00") || TimeCurrent()>StrToTime("21:00") ||
BuyClose5==True || SellClose5==True)
return;
现在第一个问题是当日最大止损 我参考别人的语法写了两种最大止损
一个是检查未平仓交易 达到条件就出场 另一个是检查已平仓交易
按照这个逻辑 我可以在出场指令那边结束这个部位
同时会再写一个Bool是去抓历史交易资料
第二个问题就是若我依据这个止损条件作为开新仓的标准
他有办法做为当日有效的指令吗?
还是说隔天符合开新仓的时间时 他一样会去检查是否有最大止损情况发生吗?
如果是这样的话 请问我需要怎麽调整才能让单笔最大止损每日重新计算
避免永远开不了新仓 囧 我找了很多网站但都没看到相关讨论
用英文搜寻也一样 所以只好上来问各位前辈了@@ 问题若过於初浅
还请见谅
Bool_BuyClose5()
{
for(int i=OrdersHistoryTotal()-1,i>=0,i--)
{
OrderSelect(i, Select_by_POS,MODE_HISTORY);
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
if(OrderType()=OP_BUY) && (OrderOpenPrice()-OrderClosePrice()>=0.002))
True
Else
False
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.200.26.252
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ForeignEX/M.1552639926.A.07F.html
1F:→ ducati5566: 意思是你要在止损後,再用这个止损价位作为新仓标准?03/16 09:19
2F:→ ColiColi: 就是一旦达到这个止损条件 当天就不再进场 我用bool或03/16 10:16
3F:→ ColiColi: 直接加在进场前的if里都没办法顺利执行这个滤网…03/16 10:16
4F:推 ducati5566: 尝试看做一个开关,停损後设成 false, 然後做一个newb03/16 10:54
5F:→ ducati5566: ar(1440),当newbar等於true,再把开关赋值true。然03/16 10:54
6F:→ ducati5566: 後执行其他程式码。我不确定是否可行03/16 10:54
7F:→ chkuya: 9点到21点那边不是应该用&&吗?03/16 10:56
8F:→ chkuya: 停损变数可以抓今日内历史平仓损益,加上未平仓损益03/16 11:00
9F:推 ducati5566: 其实我不太明白你的问题,你是停损後无法再次开单,03/16 11:06
10F:→ ducati5566: 还是再次开单的时候没有在滤镜条件内?03/16 11:06
我是设了这个停止继续下单的滤网後
经回测发现符合条件的单子没有被过滤掉
发生当日连续亏损的时候会一直被停损
还是其实用accountequity或accountbalance也可以呢
用原本的方式换了好多种都没办法顺利运作…
11F:推 chkuya: 他应该是停损值没有重新reset03/16 11:08
12F:→ chkuya: 应该不用再用另一个时间变数判断是否换日03/16 11:09
13F:→ chkuya: 直接抓今日的资料就好03/16 11:09
※ 编辑: ColiColi (175.96.101.245), 03/16/2019 13:30:47
14F:→ ducati5566: 你尝试一下c大的方法吧。跨TF的newbar在backtest好像03/16 13:36
15F:→ ducati5566: 做不到。 03/16 13:36
我会试试看C大的方法
从当日未实现损益的方式研究看看
谢谢大家
※ 编辑: ColiColi (175.96.101.245), 03/16/2019 13:40:51
16F:→ chkuya: 他应该也没有要跨TF 03/16 21:59
17F:→ chkuya: 抓当日用回圈去累加今日平仓後再加未平仓 03/16 22:01
18F:→ chkuya: 这样比用变数判断是否跨日再累加损益方便 03/16 22:03
我最後解决问题了
应该是笨方法吧XD
但我没辄了
我用void
然後用for(int i=,OrdersHistoryTotal()…)
加上if
条件是
TimeCurrent()<=OrderCloseTime()+36000
但解决一个问题就会继续碰到下个问题
真心佩服很会写程式的人~
※ 编辑: ColiColi (27.147.12.214), 03/18/2019 00:11:16