在MQL5中一起学习和写作 - 页 24 1...171819202122232425262728293031...46 新评论 Юрий Хомченко 2011.05.10 21:51 #231 这个功能是做什么的,大家都很清楚?int OpenSell(double volume,int slippage=10,string comment="Open Short EUR/USD (Sell)",int magic0=102406){MqlTradeRequest my_trade;MqlTradeResult my_trade_result;my_trade.action=TRADE_ACTION_DEAL。my_trade.symbol=Symbol()。my_trade.volume=NormalizeDouble(volume,1)。my_trade.price=NormalizeDouble(Bid,_Digits)。my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits)。my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits)。my_trade.deviation=slippage。my_trade.type=ORDER_TYPE_SELL。my_trade.type_filling=ORDER_FILLING_AON。my_trade.comment=评论。my_trade.magic=magic。ResetLastError()。如果(OrderSend(my_trade,my_trade_result)){time_oc=TimeLocal()。md=0。Print("操作结果 代码 - ",my_trade_result.retcode)。}否则{Print("操作结果代码 - ",my_trade_result.retcode)。Print("Order open error = " ,GetLastError())。}return(0);}在OnTick()过程中...OpenSell(Lots,10, "EUR/USD (Sell)",102406)。...在最开始的时候。double StopLoss=250。TakeProfit=1400。外来的双倍Lots = 0.1。为什么220美元会出现在测试结果中?<日期> <余额> <股权> <利润率水平 01,01,2010 0 :00:00 10000 10000 0 11,01,2010 2 :57:00 9779,29 9841,92 6827 15,01,2010 16:00:00 9829,8 9941,9 6857 22,01,2010 14:32:00 10124,1 10135,9 7167 26,01,2010 2 :14:00 10048,6 10048,6 0 26,01,2010 4 :06:00 10048,6 10038,4 7099 27,01,2010 21:12:00 10188,5 10188,5 0 29,01,2010 2 :16:00 10188,5 10308 7346 29,01,2010 7 :14:00 10188,5 10277,4 7324 04,02,2010 22:05:00 10418,63 10480,83 7592如果我错了,请戳我的鼻子。我不会让你看到整个EA。购买的功能类似于...我以相反的顺序关闭头寸。 Юрий Хомченко 2011.05.10 21:57 #232 好的。我一直在喊着我的头。只是学习语言。如果我冒犯了任何人,我表示歉意。我将努力工作并寻找问题所在。我自己可能已经做了,但我真的想学习如何使用mql5制作好的EA。这是一个非常好的系统,但是。到目前为止,我对它有意见。虽然我在mql4上有20个专家顾问,没有任何问题。 Валерий 2011.05.11 10:56 #233 Khomtchenko:... 最好是给出有关时期的交易记录,而不是这些未知的数字。然后也许会更清楚损失来自哪里。 Yedelkin 2011.05.11 18:46 #234 我已经开始一点一点地研究 "文件操作 "部分。你知道是否有任何关于如何在MQL5中处理文件的教程吗? Sergey Molotkov 2011.05.11 19:49 #235 删除具有某种模式的所有订单的正确方法是什么?我有两个函数用于此,check_orders检查具有某种模式的订单,remove_sl删除它们。void remove_sl() { int counter01; ulong counter02; while(check_orders()==true) { for(counter01=0; counter01<OrdersTotal(); counter01++) { counter02=OrderGetTicket(counter01); if(OrderGetInteger(ORDER_MAGIC)!=magick) continue; remove_request.action=TRADE_ACTION_REMOVE; remove_request.order=counter02; if(OrderCheck(start_request,check_result)==true) OrderSend(start_request,trade_result); } } } bool check_orders() { int counter01; bool order_exist=false; for(counter01=0; counter01<OrdersTotal(); counter01++) { OrderGetTicket(counter01); if(OrderGetInteger(ORDER_MAGIC)==magick) { order_exist=true; break; } } return(order_exist); 问题是,在EA的日志中出现了这些线条。2011.05.11 21:40:19 交易 '726238' : 取消订单失败 #4375237 在0.00000买入0.00[无效请求] 也就是说,向交易服务器发出的删除订单的请求是多余的,而删除的请求已经发出。 Юрий Хомченко 2011.05.11 20:49 #236 我想我在平仓和开仓方面遇到了问题。不知何故,我没有0.1手的头寸,而实际上有好几手。显然,一个符号的位置重叠了,位置的体积就会增长。这是解释上述大停顿值和测试时大差异问题的唯一方法。这意味着我对未平仓交易的存在分析不正确,或对平仓的痕迹分析不正确。这是我用来确定一个符号是否有未结头寸的程序。int Total(){count=0。for (i=0; i<=PositionsTotal(); i++){如果(PositionGetSymbol(i)==_Symbol){count++;}。}return(count)。}当然,该函数要么返回0,要么返回1。我使用以下条目来开立订单如果(Total()<1){如果(#对指标进行一些检查#) OpenBuy(Lots,10, "EUR/USD (Buy)",102406)。If (#some check on indicators#) OpenSell(Lots,10, "EUR/USD (Sell)",102406);}我开了买和卖,看起来像。int OpenSell(double volume,int slippage=10,string comment="Open Short EUR/USD (Sell)" ,int magic0=102406){MqlTradeRequest my_trade;MqlTradeResult my_trade_result;my_trade.action=TRADE_ACTION_DEAL。my_trade.symbol=Symbol()。my_trade.volume=NormalizeDouble(volume,1)。my_trade.price=NormalizeDouble(Bid,_Digits)。my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits)。my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits)。my_trade.deviation=slippage。my_trade.type=ORDER_TYPE_SELL。my_trade.type_filling=ORDER_FILLING_AON。my_trade.comment=评论。my_trade.magic=magic。ResetLastError()。如果(OrderSend(my_trade,my_trade_result)){time_oc=TimeLocal()。md=0。Print("操作结果 代码 - ",my_trade_result.retcode)。}否则{Print("操作结果代码 - ",my_trade_result.retcode)。Print("Order open error = " ,GetLastError())。}return(0);}我以同样的方式在主程序中关闭交易。如果(Total()>0)TryToClose()。TryToClose是这样的。int TryToClose(){for (i=0; i<=PositionsTotal(); i++){如果(PositionGetSymbol(i)==_Symbol){如果(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)。如果(#一些指标检查#) OpenSell(Lots,10, "EUR/USD (Sell)",102406)如果(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)如果(#一些指标检查#) OpenBuy(Lots,10, "EUR/USD (Buy)",102406)。}}return(0);}该指标检查,如果应该有一个买入位置,而有一个卖出位置,那么我们就做一个买入。我犯错误的地方。为什么我的位置被扩大了。 Learning and writing together MT5 分方向平仓问题 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Mykola Demko 2011.05.11 21:15 #237 Khomtchenko:通过SRC按钮插入代码Будет читабельнее 你知道MT4订单和MT5订单之间的区别吗? Юрий Хомченко 2011.05.11 21:26 #238 在mql4中,订单要么是交易,要么是待定。在mql5中,订单是一种待定交易。入市是一种开仓。当订单被触发时,一个头寸被打开。一个符号只能有一个位置,而我们可以有多少个订单。Спасибо за подсказку Юрий Хомченко 2011.05.11 21:59 #239 每个人都不停地暗示我是愚蠢的。我可能是个哑巴。好吧,找到我的错误,这样我就可以纠正它们。 Mykola Demko 2011.05.11 22:20 #240 Khomtchenko:我都有点蠢蠢欲动的感觉了。我可能很傻。好吧,找到我的错误,这样我就可以纠正它们。 我不是在暗示什么,我只是跑过去问什么是最常见的原因,我不知道你的训练水平。我在这里呆了很久,对很多人已经形成了看法(每个人都有自己的强项),我还不了解你,所以我不打算暗示什么。我没有看到战略的大局观。从你通过仓位的事实来看,该策略是多货币的。但你只规定了一个工具,如果工具是一个,为什么要循环使用这些位置?如果你知道这个乐器,你不需要翻阅所有的位置来寻找它们,你只需要使用这个功能。bool PositionSelect( string symbol // имя инструмента ); 1...171819202122232425262728293031...46 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这个功能是做什么的,大家都很清楚?
int OpenSell(double volume,int slippage=10,string comment="Open Short EUR/USD (Sell)",int magic0=102406)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;
my_trade.action=TRADE_ACTION_DEAL。
my_trade.symbol=Symbol()。
my_trade.volume=NormalizeDouble(volume,1)。
my_trade.price=NormalizeDouble(Bid,_Digits)。
my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits)。
my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits)。
my_trade.deviation=slippage。
my_trade.type=ORDER_TYPE_SELL。
my_trade.type_filling=ORDER_FILLING_AON。
my_trade.comment=评论。
my_trade.magic=magic。
ResetLastError()。
如果(OrderSend(my_trade,my_trade_result))
{
time_oc=TimeLocal()。
md=0。
Print("操作结果 代码 - ",my_trade_result.retcode)。
}
否则
{
Print("操作结果代码 - ",my_trade_result.retcode)。
Print("Order open error = " ,GetLastError())。
}
return(0);
}
在OnTick()过程中
...
OpenSell(Lots,10, "EUR/USD (Sell)",102406)。
...
在最开始的时候。
double StopLoss=250。
TakeProfit=1400。
外来的双倍Lots = 0.1。
为什么220美元会出现在测试结果中?
<日期> <余额> <股权> <利润率水平
01,01,2010 0 :00:00 10000 10000 0
11,01,2010 2 :57:00 9779,29 9841,92 6827
15,01,2010 16:00:00 9829,8 9941,9 6857
22,01,2010 14:32:00 10124,1 10135,9 7167
26,01,2010 2 :14:00 10048,6 10048,6 0
26,01,2010 4 :06:00 10048,6 10038,4 7099
27,01,2010 21:12:00 10188,5 10188,5 0
29,01,2010 2 :16:00 10188,5 10308 7346
29,01,2010 7 :14:00 10188,5 10277,4 7324
04,02,2010 22:05:00 10418,63 10480,83 7592
如果我错了,请戳我的鼻子。
我不会让你看到整个EA。购买的功能类似于...
我以相反的顺序关闭头寸。
好的。我一直在喊着我的头。只是学习语言。如果我冒犯了任何人,我表示歉意。我将努力工作并寻找问题所在。我自己可能已经做了,但我真的想学习如何使用mql5制作好的EA。这是一个非常好的系统,但是。到目前为止,我对它有意见。
虽然我在mql4上有20个专家顾问,没有任何问题。
...
我已经开始一点一点地研究 "文件操作 "部分。你知道是否有任何关于如何在MQL5中处理文件的教程吗?
删除具有某种模式的所有订单的正确方法是什么?
我有两个函数用于此,check_orders检查具有某种模式的订单,remove_sl删除它们。
问题是,在EA的日志中出现了这些线条。
2011.05.11 21:40:19 交易 '726238' : 取消订单失败 #4375237 在0.00000买入0.00[无效请求]
也就是说,向交易服务器发出的删除订单的请求是多余的,而删除的请求已经发出。
我想我在平仓和开仓方面遇到了问题。
不知何故,我没有0.1手的头寸,而实际上有好几手。显然,一个符号的位置重叠了,位置的体积就会增长。这是解释上述大停顿值和测试时大差异问题的唯一方法。这意味着我对未平仓交易的存在分析不正确,或对平仓的痕迹分析不正确。
这是我用来确定一个符号是否有未结头寸的程序。
int Total()
{
count=0。
for (i=0; i<=PositionsTotal(); i++)
{
如果(PositionGetSymbol(i)==_Symbol){count++;}。
}
return(count)。
}
当然,该函数要么返回0,要么返回1。
我使用以下条目来开立订单
如果(Total()<1)
{
如果(#对指标进行一些检查#) OpenBuy(Lots,10, "EUR/USD (Buy)",102406)。
If (#some check on indicators#) OpenSell(Lots,10, "EUR/USD (Sell)",102406);
}
我开了买和卖,看起来像。
int OpenSell(double volume,int slippage=10,string comment="Open Short EUR/USD (Sell)" ,int magic0=102406)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;
my_trade.action=TRADE_ACTION_DEAL。
my_trade.symbol=Symbol()。
my_trade.volume=NormalizeDouble(volume,1)。
my_trade.price=NormalizeDouble(Bid,_Digits)。
my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits)。
my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits)。
my_trade.deviation=slippage。
my_trade.type=ORDER_TYPE_SELL。
my_trade.type_filling=ORDER_FILLING_AON。
my_trade.comment=评论。
my_trade.magic=magic。
ResetLastError()。
如果(OrderSend(my_trade,my_trade_result))
{
time_oc=TimeLocal()。
md=0。
Print("操作结果 代码 - ",my_trade_result.retcode)。
}
否则
{
Print("操作结果代码 - ",my_trade_result.retcode)。
Print("Order open error = " ,GetLastError())。
}
return(0);
}
我以同样的方式在主程序中关闭交易。
如果(Total()>0)TryToClose()。
TryToClose是这样的。
}
该指标检查,如果应该有一个买入位置,而有一个卖出位置,那么我们就做一个买入。
我犯错误的地方。为什么我的位置被扩大了。
通过SRC按钮插入代码
你知道MT4订单和MT5订单之间的区别吗?在mql4中,订单要么是交易,要么是待定。
在mql5中,订单是一种待定交易。入市是一种开仓。当订单被触发时,一个头寸被打开。一个符号只能有一个位置,而我们可以有多少个订单。
每个人都不停地暗示我是愚蠢的。我可能是个哑巴。好吧,找到我的错误,这样我就可以纠正它们。
我都有点蠢蠢欲动的感觉了。我可能很傻。好吧,找到我的错误,这样我就可以纠正它们。
我不是在暗示什么,我只是跑过去问什么是最常见的原因,我不知道你的训练水平。
我在这里呆了很久,对很多人已经形成了看法(每个人都有自己的强项),我还不了解你,所以我不打算暗示什么。
我没有看到战略的大局观。从你通过仓位的事实来看,该策略是多货币的。
但你只规定了一个工具,如果工具是一个,为什么要循环使用这些位置?
如果你知道这个乐器,你不需要翻阅所有的位置来寻找它们,你只需要使用这个功能。