任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 1098 1...109110921093109410951096109710981099110011011102110311041105...1178 新评论 Vitalie Postolache 2016.09.16 14:44 #10971 wishmast:伙计们,我已经绞尽脑汁了。我如何让EA在高点和低点下挂单,例如8根蜡烛,获利1/4。我做的事情是这样的。double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0)。double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0)。双TP=((Vhod1-Vhod2)/4)+Vhod1。我试图改变参数,但一直得到错误的止损,或将价格设定在7.00000;不清楚它来自哪里。iHighest, iLowest将给你提供蜡烛图的地址,但不提供价格。 A13ksandr 2016.09.17 04:14 #10972 evillive: iHighest, iLowest将给出蜡烛的地址,而不是价格。这就对了。我们需要double Vhod1=iHigh(Symbol(), 0,iHighest(Symbol(),0,MODE_HIGH,8,0))。double Vhod2=iLow(Symbol(), 0, iLowest(Symbol(),0,MODE_LOW,8,0))。 A13ksandr 2016.09.17 08:03 #10973 alvlaf: 我把它放错了,但它仍然不会正常工作,因为......。因为。)总之,它应该是这样的。1) 在inite中创建一个AllowNewOrders变量(如果它不存在)。2) 创建一个新的订单,直到它关闭,这个符号的OnTick是空闲的,但将运行另一个符号的OnTick3) 对其他符号执行第2步,直到达到MaxOpenOrders限制。4) 当订单完成时,如果它是亏损或价值为零,通过AllowNewOrders禁止为所有副本开立新的订单。[这里有一个直接的问题--当输掉的系列结束时,AllowNewOrders=1,但是如果MaxOpenOrders>1并且有几个这样的会议呢?]5) 如果第4点没有得到满足,那么你可以开新的订单。当MaxOpenOrders=1时,该程序必须工作。也许,如果我们在一个无利可图的订单之后禁止新的订单,AllowNewOrders=0,而下一个OrderSend,由于某种原因,没有打开订单,就会出现问题。我将在下面写出我是如何对冲这个案例的...int OnInit() { if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders", 1); return(INIT_SUCCEEDED); } //---------------------------------------------------------------------- void OnTick() { if (CountTrades() == 0) // Количество ордеров должно равняться нулю { if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом { GlobalVariableSet("AllowNewOrders", 0); Type = TypeLastHistOrder(); if (Type == OP_BUY) Price = Ask; if (Type == OP_SELL) Price = Bid; Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2); ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic); } else GlobalVariableSet("AllowNewOrders", 1); if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) // Если прибыль последней сделки равняется нулю, то открывается такая же { GlobalVariableSet("AllowNewOrders", 0); Type = TypeLastHistOrder(); if (Type == OP_BUY) Price = Ask; if (Type == OP_SELL) Price = Bid; Lot = NormalizeDouble(LotsLastHistOrder(), 2); ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic); } else GlobalVariableSet("AllowNewOrders", 1); if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY)) || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))) || CountHistTrades() == 0) // Если последняя сделка прибыльная или это первая сделка, то открывается ордер { if (OrdersTotal() >= MaxOpenOrders || GlobalVariableGet("AllowNewOrders") == 0) return; if (SignalBuy()) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (SignalSell()) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic); } } } } A13ksandr 2016.09.17 08:22 #10974 A13ksandr:我将在下面写出我是如何为这种情况保值的......int Tries = 5; ResetLastError(); do { // решение ошибок с предыдущей попытки открытия ордера, например: if (_Error == 134) { _Lot = NormalizeDouble(_Lot / 2, 2); if (_Lot < SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN)) _Lot = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN); } if (_Error == 138) RefreshRates(); Ticket = OrderSend(Symbol(), OP_BUY, _Lot, Ask, 3, 0, 0, NULL, 0, 0, clrNONE); if (Ticket < 0) { _Error = GetLastError(); Sleep(100); } Tries--; } while (Ticket < 0 && Tries > 0);如果正确预见错误解决方案,开单的成功率就会提高。 Nikolay Volkov 2016.09.17 16:22 #10975 你好!请告诉我,如果我使用帖子中的功能(每个订单都有自己的魔术师)- http://forum.forexpeoples.ru/showthr...=1#post1715092 ,如果不是每个订单都有自己的魔术师,而是每个系列的订单都有自己的魔术师,那么如何找到销售或购买的最后一个订单,或者升级一系列的订单。即假设当一个新系列的订单有自己的魔力被打开时,旧系列的订单继续用自己的魔力打开自己的订单。每个系列预计都有自己的利润,而且有很多这样的系列订单。 for(cnt=OrdersTotal()-1;cnt>=0;cnt--){ if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue; if(OrderSymbol()!=Symbol()) continue; if(OrderMagicNumber() < startMagicNumber || OrderMagicNumber() >= startMagicNumber + MaxTrades) continue; 我把代码放到了一个系列的第一笔订单时生成一个magik,但在同一系列中打开新的订单时,问题出现了。 从帖子中生成魔法的代码本身: //+------------------------------------------------------------------+ //获得系列中的下一个魔法 int getNextMagicNumber(){ int magic = EMPTY; if (OrdersTotal() == 0) { return(startMagicNumber); } for (int i = startMagicNumber; i < startMagicNumber + MaxTrades; i++){ magic = checkMarketByMagic(i); if (magic != EMPTY) break; } if (magic == EMPTY){ magic = startMagicNumber; //系列中的第一个 } else { magic++; //系列中的下一个 } return(magic); } //+------------------------------------------------------------------+ // keekkenen: 检查市场中是否有给定magic的订单 int checkMarketByMagic(int magic){ for(int i = 0; i < OrdersTotal(); i++) { if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if(OrderSymbol() != Symbol() continue; if(OrderMagicNumber() == magic) return(magic); } return(EMPTY) ; } //+------------------------------------------------------------------+ 如何编码? 编码帮助 求救!关于两个EA同时运行的问题。 [删除] 2016.09.17 17:07 #10976 下午好,论坛的先生们,,如果我混淆了主题,请原谅,但我没有找到正确的地方来发布THEME,所以不要踢我。有时,在互联网上浏览新的专家顾问系统时,我遇到一个我没有注意的,因为它的描述是标准的,其中有很多,但我没有注意到它的名字。如果我没有见过或者读过,请告诉我名字,谷歌会做它的工作,或者如果我有,我会把它作为礼物。也许有一个类似的顾问执行类似的行动。我将描述专家顾问的含义(没有什么非常复杂的东西,我现在需要的)。粗略地说,这项工作看起来是这样的: 1.手动开仓,比如说买入。2.专家顾问根据设置设置了止损和止盈。3.该订单在止盈时被关闭--EA立即开启另一个买入,并设置相同的止损和止盈,直到赶上第一个止损或有最终止盈。4.如果通过止损关闭头寸,机器人就不再做任何事情。专家顾问等待下一个订单被手动打开。这就是全部。我将非常感激。 Aleksandr Afanasenko 2016.09.18 10:58 #10977 A13ksandr: 我把它插错了,但还是不能正常工作,因为...因为。)总之,事情是这样的。1) 在initem中创建一个AllowNewOrders变量(如果它不存在)。2) 创建一个新的订单,直到它关闭 这个符号的OnTick是空闲的,但其他符号的OnTick将工作3) 对其他符号执行第2步,直到达到MaxOpenOrders限制。4) 当订单完成时,如果它是亏损或价值为零,通过AllowNewOrders禁止为所有副本开立新的订单。[这里有一个直接的问题--当输掉的系列结束时,AllowNewOrders=1,但是如果MaxOpenOrders>1并且有几个这样的会议呢?]5) 如果第4点没有得到满足,那么你可以开新的订单。当MaxOpenOrders=1时,该程序必须工作。也许,如果我们在一个无利可图的订单之后禁止新的订单,AllowNewOrders=0,而下一个OrderSend,由于某种原因,没有打开订单,就会出现问题。我将在下面写出我是如何对冲这种情况的。 谢谢你,亚历山大,我明天会检查的。[因此,问题马上就来了--当输掉的系列结束时,AllowNewOrders=1,如果MaxOpenOrders>1并且有几个会话?]如果MaxOpenOrders>1的某个值,那么在想法中AllowNewOrders=1也应该大于相同的值。但我们不需要为此费心,MaxOpenOrders根本就应该被删除,因为在这个版本的程序中,无论如何我们都不会计划超过一个系列。 Aleksandr Afanasenko 2016.09.19 03:34 #10978 alvlaf: 谢谢你,亚历山大,我明天会检查的。[因此问题马上就来了--当输掉的系列结束时,AllowNewOrders=1,但如果MaxOpenOrders>1且有多个会话?]如果MaxOpenOrders>1的某个值,那么在想法中AllowNewOrders=1也应该大于相同的值。但我现在不需要为它费心,MaxOpenOrders应该被完全省略,因为在这个版本的程序中,无论如何都不会有超过一个系列的计划。 我试了一下,头五分钟工作正常,然后我开始一次打开几个交易(4个),而且是同一对较大的手数。亚历山大,我不太明白在你的版本中,全局变量 是如何获得和改变其值的? ilmel 2016.09.19 07:29 #10979 大家好!这里是图形上的一个图形对象。它的参数是时间,价值,代码。该值对应于该对象所在的价格。有什么方法可以得到它的时间和价值吗(通过一个函数或其他东西)?\\\\\或者,从更广泛的意义上讲,是否有任何对象(除了趋势线、斐波那契线、甘尼特)能够让我们即时获得它们的时间和价格?我需要在图表上放置一些标记,并从中获取信息。绘制趋势线、菲博等...- 它是非常繁琐和缓慢的...谢谢你的回答 !PS 刚刚开始学习... [删除] 2016.09.19 08:13 #10980 ilmel:大家好!这里有一个图形对象在一个图形上。它的参数是时间,价值,代码。该值对应于该对象所在的价格。有什么方法可以得到它的时间和价值吗(通过一个函数或其他东西)?\\\\\或者,在更广泛的背景下,是否有任何对象(除了趋势线、斐波那契线、甘尼特)可以在时间和价格上立即得出?我需要在图表上放置一些标记,并从它们那里获得信息。绘制趋势线、菲博等...- 它是非常繁琐和缓慢的...谢谢你的回答!PS 刚刚开始学习... https://docs.mql4.com/ru/objects/objectgetdouble https://docs.mql4.com/ru/objects/objectgetinteger 1...109110921093109410951096109710981099110011011102110311041105...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
伙计们,我已经绞尽脑汁了。我如何让EA在高点和低点下挂单,例如8根蜡烛,获利1/4。
我做的事情是这样的。
double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0)。
double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0)。
双TP=((Vhod1-Vhod2)/4)+Vhod1。
我试图改变参数,但一直得到错误的止损,或将价格设定在7.00000;不清楚它来自哪里。
iHighest, iLowest将给出蜡烛的地址,而不是价格。
这就对了。我们需要
double Vhod1=iHigh(Symbol(), 0,iHighest(Symbol(),0,MODE_HIGH,8,0))。
double Vhod2=iLow(Symbol(), 0, iLowest(Symbol(),0,MODE_LOW,8,0))。
我把它放错了,但它仍然不会正常工作,因为......。因为。)总之,它应该是这样的。
1) 在inite中创建一个AllowNewOrders变量(如果它不存在)。
2) 创建一个新的订单,直到它关闭,这个符号的OnTick是空闲的,但将运行另一个符号的OnTick
3) 对其他符号执行第2步,直到达到MaxOpenOrders限制。
4) 当订单完成时,如果它是亏损或价值为零,通过AllowNewOrders禁止为所有副本开立新的订单。
[这里有一个直接的问题--当输掉的系列结束时,AllowNewOrders=1,但是如果MaxOpenOrders>1并且有几个这样的会议呢?]
5) 如果第4点没有得到满足,那么你可以开新的订单。
当MaxOpenOrders=1时,该程序必须工作。也许,如果我们在一个无利可图的订单之后禁止新的订单,AllowNewOrders=0,而下一个OrderSend,由于某种原因,没有打开订单,就会出现问题。我将在下面写出我是如何对冲这个案例的...
我将在下面写出我是如何为这种情况保值的......
如果正确预见错误解决方案,开单的成功率就会提高。
for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol()!=Symbol()) continue; if(OrderMagicNumber() < startMagicNumber || OrderMagicNumber() >= startMagicNumber + MaxTrades) continue;
我把代码放到了一个系列的第一笔订单时生成一个magik,但在同一系列中打开新的订单时,问题出现了。
从帖子中生成魔法的代码本身://+------------------------------------------------------------------+
//获得系列中的下一个魔法
int getNextMagicNumber(){
int magic = EMPTY;
if (OrdersTotal() == 0) {
return(startMagicNumber);
}
for (int i = startMagicNumber; i < startMagicNumber + MaxTrades; i++){
magic = checkMarketByMagic(i);
if (magic != EMPTY) break;
}
if (magic == EMPTY){
magic = startMagicNumber; //系列中的第一个
} else {
magic++; //系列中的下一个
}
return(magic);
}
//+------------------------------------------------------------------+
// keekkenen: 检查市场中是否有给定magic的订单
int checkMarketByMagic(int magic){
for(int i = 0; i < OrdersTotal(); i++) {
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if(OrderSymbol() != Symbol() continue;
if(OrderMagicNumber() == magic) return(magic);
}
return(EMPTY) ;
}
//+------------------------------------------------------------------+
,如果我混淆了主题,请原谅,但我没有找到正确的地方来发布THEME,所以不要踢我。
有时,在互联网上浏览新的专家顾问系统时,我遇到一个我没有注意的,因为它的描述是标准的,其中有很多,但我没有注意到它的名字。
如果我没有见过或者读过,请告诉我名字,谷歌会做它的工作,或者如果我有,我会把它作为礼物。也许有一个类似的顾问执行类似的行动。
我将描述专家顾问的含义(没有什么非常复杂的东西,我现在需要的)。
粗略地说,这项工作看起来是这样的:
1.手动开仓,比如说买入。
2.专家顾问根据设置设置了止损和止盈。
3.该订单在止盈时被关闭--EA立即开启另一个买入,并设置相同的止损和止盈,直到赶上第一个止损或有最终止盈。
4.如果通过止损关闭头寸,机器人就不再做任何事情。专家顾问等待下一个订单被手动打开。
这就是全部。
我将非常感激。
我把它插错了,但还是不能正常工作,因为...因为。)总之,事情是这样的。
1) 在initem中创建一个AllowNewOrders变量(如果它不存在)。
2) 创建一个新的订单,直到它关闭 这个符号的OnTick是空闲的,但其他符号的OnTick将工作
3) 对其他符号执行第2步,直到达到MaxOpenOrders限制。
4) 当订单完成时,如果它是亏损或价值为零,通过AllowNewOrders禁止为所有副本开立新的订单。
[这里有一个直接的问题--当输掉的系列结束时,AllowNewOrders=1,但是如果MaxOpenOrders>1并且有几个这样的会议呢?]
5) 如果第4点没有得到满足,那么你可以开新的订单。
当MaxOpenOrders=1时,该程序必须工作。也许,如果我们在一个无利可图的订单之后禁止新的订单,AllowNewOrders=0,而下一个OrderSend,由于某种原因,没有打开订单,就会出现问题。我将在下面写出我是如何对冲这种情况的。
谢谢你,亚历山大,我明天会检查的。[因此问题马上就来了--当输掉的系列结束时,AllowNewOrders=1,但如果MaxOpenOrders>1且有多个会话?]如果MaxOpenOrders>1的某个值,那么在想法中AllowNewOrders=1也应该大于相同的值。但我现在不需要为它费心,MaxOpenOrders应该被完全省略,因为在这个版本的程序中,无论如何都不会有超过一个系列的计划。
大家好!
这里是图形上的一个图形对象。
它的参数是时间,价值,代码。该值对应于该对象所在的价格。
有什么方法可以得到它的时间和价值吗(通过一个函数或其他东西)?
\\\\\
或者,从更广泛的意义上讲,是否有任何对象(除了趋势线、斐波那契线、甘尼特)能够让我们即时获得它们的时间和价格?
我需要在图表上放置一些标记,并从中获取信息。绘制趋势线、菲博等...- 它是非常繁琐和缓慢的...
谢谢你的回答 !
PS 刚刚开始学习...
大家好!
这里有一个图形对象在一个图形上。
它的参数是时间,价值,代码。该值对应于该对象所在的价格。
有什么方法可以得到它的时间和价值吗(通过一个函数或其他东西)?
\\\\\
或者,在更广泛的背景下,是否有任何对象(除了趋势线、斐波那契线、甘尼特)可以在时间和价格上立即得出?
我需要在图表上放置一些标记,并从它们那里获得信息。绘制趋势线、菲博等...- 它是非常繁琐和缓慢的...
谢谢你的回答!
PS 刚刚开始学习...
https://docs.mql4.com/ru/objects/objectgetinteger