初学者的问题 MQL5 MT5 MetaTrader 5 - 页 360 1...353354355356357358359360361362363364365366367...1503 新评论 Alexander Layzerevich 2015.05.20 06:19 #3591 下午好。能否请您告诉我在MT4交易EA时如何正确写代码,我对编程非常陌生。我必须选择最后关闭的订单并比较其利润。 如果其利润大于0,我就不做任何事情,如果小于0,我就必须做一些事情。double GetSizeLot(double lastlot=0) //Функция возвращает значение лотов { double Lot2,MinLots,MaxLots; int j=OrdersHistoryTotal(); MinLots=Lots; MaxLots=MaxLot; if(!DynamicLot)Lot2=Lots; if(lastlot<Lot2)lastlot=Lot2; if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)) { if(OrderProfit()<0) lastlot=lastlot*Martin; if(OrderProfit()>0) lastlot=Lot2; } Lot2=lastlot; if(Lot2 < MinLots) Lot2 = MinLots; if(Lot2 > MaxLots) Lot2 = MaxLots; return(NormalizeDouble(Lot2,2)); }我非常尊重你,亚历山大。 Vladimir Pastushak 2015.05.21 06:14 #3592 Menshikov:下午好。能否请您告诉我在MT4交易EA时如何正确写代码,我对编程非常陌生。我必须选择最后关闭的订单并比较其利润。 如果其利润大于0,我就不做任何事情,如果小于0,我就必须做一些事情。我非常尊重你,亚历山大。//+------------------------------------------------------------------+ datetime time=0; double profit=0,lots=0; for(int i=OrdersHistoryTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if(OrderSymbol()==_Symbol) if(OrderMagicNumber()==MagicNumber || MagicNumber==-1) if(OrderCloseTime()>time) // находим последний в истории ордер { time=OrderCloseTime(); // запомним время profit=OrderProfit(); // запомним профит his_lt=OrderLots(); // запомним лот } if(profit<0) //если профит меньше нуля lots=his_lt*2; // Увеличим в два раза //+------------------------------------------------------------------+ Alexander Layzerevich 2015.05.21 09:53 #3593 Vladimir Pastushak: 非常感谢你。 Artyom Trishkin 2015.05.22 12:27 #3594 Vladimir Pastushak: 我不知道这个时间是干什么用的,为什么要记住关门时间,反正你选择的是列表中的最后一个,那这个周期呢?而你为什么不考虑交换和佣金呢?即使OrderProfit()>0,实际利润也可能是负数。如果你直接处理订单列表,那么你就不应该留下寻找最后一个订单的循环代码的碎片。一件事是要么可靠和确定,要么就是速度。而你有一个杂乱无章的东西。 Vladimir Pastushak 2015.05.22 12:58 #3595 Artyom Trishkin: 我不知道这个时间是干什么用的,为什么要记住关门时间,反正你选择的是列表中的最后一个,那这个周期呢?而你为什么不考虑交换和佣金呢?即使OrderProfit()>0,实际利润也可能是负数。如果你直接处理订单列表,你不应该从循环中留下大块的代码,在关闭的时候寻找最后一个订单。一件事是要么可靠和确定,要么就是速度。你所拥有的是一个杂乱无章的东西。你所建议的是 if(OrderSelect(OrdersHistoryTotal(),SELECT_BY_POS,MODE_HISTORY))你会这样做吗?这个人只要求一个利润订单,为什么要强加你没有要求的东西?但我同意你的观点 .... BEGEMOT32 2015.05.23 11:08 #3596 请告知如何在MT4的MQL4中,在20个柱子后关闭未平仓的订单,即当订单被打开并出现20个新柱子时,它就会被关闭。(只有1个订单始终开放)。由于某些原因,这段代码在策略测试器中 不起作用,而我们需要它这样做。该代码有如下含义:我们检查是否有任何未平仓的订单,如果没有,我们打开一个订单,并在 "z "变量中记录第1条的未平仓价格,然后随着每一个刻度,我们检查第20条的未平仓价格,当第1条最终到达第20条时,其价格将与 "z "变量中记录的价格相同,然后该订单将被关闭。(当然,在这个过程中,价格可以重合,但这将是非常罕见的,此外,我们可以将第1条的更多参数写入变量中)double z; //объявление переменной //ОТКРЫТИЕ ОРДЕРА if(OrdersTotal() == 0) // если нет открытых ордеров то открывать ордер { OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, Bid+150*Point, Bid-10*Point); z = Open[1]; // здесь переменной "z" присваивается цена открытия 1-го бара } else Print("ORDER NE USTANOVLEN!!!"); //ЗАКРЫТИЕ ОРДЕРА if (z==Open[20]) //если цена записанная в переменную "z" равна цене 20-го бара, то закрывать ордер { //-----------------код закрывает все ордера-------------------- bool result; int error; while (OrdersTotal()>0) { if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE); if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE); if (OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket()); if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error, " ",Symbol()); } else error=0; } else Print( "Error when order select ", GetLastError()); } //------------конец кода закрывающего ордер------------------ } else Print("ORDER NE ZAKRYT!!!"); BEGEMOT32 2015.05.23 11:33 #3597 BEGEMOT32:请告知如何在MT4的MQL4中,在20个柱子后关闭未平仓的订单,即当订单被打开并出现20个新柱子时,它就会被关闭。(只有1个订单始终开放)。由于某些原因,这段代码在策略测试器中 不起作用,而我们需要它这样做。该代码有如下含义:我们检查是否有任何未平仓的订单,如果没有,我们打开一个订单,并在 "z "变量中记录第1条的未平仓价格,然后随着每一个刻度,我们检查第20条的未平仓价格,当第1条最终到达第20条时,其价格将与 "z "变量中记录的价格相同,然后该订单将被关闭。(当然在这个过程中,价格可以重合,但这将是非常罕见的,此外,我们可以将第1条的更多参数写入变量中) 就是这样,我自己想明白了,我应该在int start()之外声明这个变量--现在工作正常了。 Vladimir Pastushak 2015.05.23 14:27 #3598 BEGEMOT32: 就是这样,我自己想明白了,我应该在int start()之外声明一个变量--现在工作正常了。我对你的代码进行了一些简化,但你的代码中仍然存在错误//ОТКРЫТИЕ ОРДЕРА if(OrdersTotal()==0) // если нет открытых ордеров то открывать ордер if(OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+150*Point,Bid-10*Point)<0) Print("ORDER NE USTANOVLEN!!!"); //-----------------код закрывает все ордера-------------------- bool result; int error; while(OrdersTotal()>0) { if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)) { if(iBarShift(OrderSymbol(),Period(),OrderOpenTime())==20) { if(OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE); if(OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK),MarketInfo(OrderSymbol(),MODE_DIGITS)),3,CLR_NONE); if(OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket()); } if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error," ",Symbol()); } else error=0; } else Print("Error when order select ",GetLastError()); } chama 2015.05.24 11:15 #3599 我正在编写一个多币种的EA,但我不明白为什么如果我把它与不同的货币联系起来,它在同一时间返回不同的价格简而言之,代码。在启动时EventSetTimer(60);在OnTimer()中MqlTick last_tick; if(SymbolInfoTick("EURNZD",last_tick)) { Print("Last Ask: ", last_tick.ask); }如果我在EURNZD上测试我的EA,比如说2015.05.18 00:07:00Lat Ask: 1.5370如果我使用任何其他货币对2015.05.18 00:07:00Lat Ask: 1.5323这个值是完全不同的,在第二种情况下,根据图表,至少在几个小时内不可能有这样一个值在策略测试器中,所有的点都处于交易模式,我感觉如果不是主要的货币对,策略测试器中的数值是近似的。我忘了补充,这是Meta Trade 5我发现,第一次做的时候,价格是错误的,第二次做的时候,价格是正常的。 forexman77 2015.05.25 11:51 #3600 1.你能从历史上找出多少个刻度的刻度量,并在刻度量 上有所上升和下降吗?2.我删除autochartis已经有几个月了,但日志信息一直冒出来。该软件一直试图打开文件。如何彻底清除autochartis?2015.05.25 15:36:42.983 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Volatility.ex4' [2] 2015.05.25 15:36:42.983 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Key Levels.ex4' [2] 2015.05.25 15:36:42.982 Cannot open file 'C:\Users\asus\AppData\Roaming\MetaQuotes\Terminal\................................\MQL4\indicators\Autochartist Chart Patterns.ex4' [2] 1...353354355356357358359360361362363364365366367...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下午好。
能否请您告诉我在MT4交易EA时如何正确写代码,我对编程非常陌生。
我必须选择最后关闭的订单并比较其利润。 如果其利润大于0,我就不做任何事情,如果小于0,我就必须做一些事情。
我非常尊重你,亚历山大。
下午好。
能否请您告诉我在MT4交易EA时如何正确写代码,我对编程非常陌生。
我必须选择最后关闭的订单并比较其利润。 如果其利润大于0,我就不做任何事情,如果小于0,我就必须做一些事情。
我非常尊重你,亚历山大。
我不知道这个时间是干什么用的,为什么要记住关门时间,反正你选择的是列表中的最后一个,那这个周期呢?而你为什么不考虑交换和佣金呢?即使OrderProfit()>0,实际利润也可能是负数。如果你直接处理订单列表,你不应该从循环中留下大块的代码,在关闭的时候寻找最后一个订单。一件事是要么可靠和确定,要么就是速度。你所拥有的是一个杂乱无章的东西。
你所建议的是
你会这样做吗?
这个人只要求一个利润订单,为什么要强加你没有要求的东西?但我同意你的观点 ....
请告知如何在MT4的MQL4中,在20个柱子后关闭未平仓的订单,即当订单被打开并出现20个新柱子时,它就会被关闭。(只有1个订单始终开放)。由于某些原因,这段代码在策略测试器中 不起作用,而我们需要它这样做。
该代码有如下含义:我们检查是否有任何未平仓的订单,如果没有,我们打开一个订单,并在 "z "变量中记录第1条的未平仓价格,然后随着每一个刻度,我们检查第20条的未平仓价格,当第1条最终到达第20条时,其价格将与 "z "变量中记录的价格相同,然后该订单将被关闭。(当然,在这个过程中,价格可以重合,但这将是非常罕见的,此外,我们可以将第1条的更多参数写入变量中)
请告知如何在MT4的MQL4中,在20个柱子后关闭未平仓的订单,即当订单被打开并出现20个新柱子时,它就会被关闭。(只有1个订单始终开放)。由于某些原因,这段代码在策略测试器中 不起作用,而我们需要它这样做。
该代码有如下含义:我们检查是否有任何未平仓的订单,如果没有,我们打开一个订单,并在 "z "变量中记录第1条的未平仓价格,然后随着每一个刻度,我们检查第20条的未平仓价格,当第1条最终到达第20条时,其价格将与 "z "变量中记录的价格相同,然后该订单将被关闭。(当然在这个过程中,价格可以重合,但这将是非常罕见的,此外,我们可以将第1条的更多参数写入变量中)
就是这样,我自己想明白了,我应该在int start()之外声明一个变量--现在工作正常了。
我对你的代码进行了一些简化,但你的代码中仍然存在错误
我正在编写一个多币种的EA,但我不明白为什么如果我把它与不同的货币联系起来,它在同一时间返回不同的价格
简而言之,代码。
在启动时
在OnTimer()中
如果我在EURNZD上测试我的EA,比如说
2015.05.18 00:07:00Lat Ask: 1.5370
如果我使用任何其他货币对
2015.05.18 00:07:00Lat Ask: 1.5323
这个值是完全不同的,在第二种情况下,根据图表,至少在几个小时内不可能有这样一个值
在策略测试器中,所有的点都处于交易模式,我感觉如果不是主要的货币对,策略测试器中的数值是近似的。
我忘了补充,这是Meta Trade 5
我发现,第一次做的时候,价格是错误的,第二次做的时候,价格是正常的。
如何彻底清除autochartis?