谁能帮助解决机器人的问题,为什么它不工作了? - 页 3 1234567 新评论 Dmitriy Gizlyk 2016.02.10 18:03 #21 对于GIM 如果你只想开单,那么指定0而不是SL / TP。如果SL或TP为0,你将不得不在你的请求中输入0,如果你输入一个值,你将不得不计算出订单关闭的价格。 GIM 2016.02.10 18:33 #22 Dmitriy Gizlyk: 对于GIM 如果你只想开单,那么指定0而不是SL / TP。对于未来,你必须检查:如果SL或TP是0,那么你必须在请求中指定0。 如果你指定一个值,那么计算订单的收盘价。 我想让专家顾问根据所有交易的总利润来开仓和平仓....。 Vitalii Ananev 2016.02.11 07:07 #23 AdikAmir:外来的双倍Lots=0.1。外来的双倍FastMAPeriod=5。Extern int FastMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA外部int FastMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted外置 int SlowMAPeriod=75;外部intn SlowMAMethod=3; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA外部int SlowMAPrice=3; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted外置 int TP=500; //takeprofitextern int SL=250; //stop loss双重提法。int start(){double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1)。double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod, SlowMAPrice,1)。double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2)。double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod, SlowMAPrice,2)。如果(OrdersTotal()==0){如果(fast_ma1>slow_ma1 && (fast_ma2<slow_ma2)){ ticet = OrderSend(Symbol(,OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);如果(ticet==0)Print("ERROR")。}如果(slow_ma1>fast_ma1 && (slow_ma2<fast_ma2)){ticet = OrderSend(Symbol(,OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE)。如果(ticet==0)Print("ERROR")。}}return(0);}阅读日志。也许那里有关于在编译时没有检测到的错误的信息。这里有一个错误 OrderSend(Symbol(,OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE)。你需要做以下工作 OrderSend(Symbol(),OP_SELL,Lots,Bid,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE) 。当你卖出时,止损应该在当前价格之上,而拿货则在下面。 在你的案例中,恰恰相反,你把止损放在价格之下,而拿货则在上面。 Dmitriy Gizlyk 2016.02.11 13:05 #24 GIM: 我想让专家顾问按所有交易的总利润开仓和平仓....。在这种情况下,开仓时,把SL=0,TP=0。为了关闭一个头寸,我们需要在每个tick上将获得的利润与设定的值进行比较。而当利润达到指定值时,我们需要通过OrderClose(....)关闭循环中的所有订单。就确定当前的利润而言,根据所设定的任务,可能会有变化。如果你看账户的利润,你可以简单地采取AccountProfit(),但更费力的方式可能是通过一个循环(那么我们可以只计算必要订单的利润)。 double profit=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */) { profit+=OrderProfit()+OrderSwap()+OrderCommission(); } } GIM 2016.02.11 13:15 #25 Dmitriy Gizlyk:在这种情况下,开仓时,把SL=0,TP=0。为了关闭一个头寸,我们需要在每个tick上将获得的利润与设定的值进行比较。而当利润达到指定值时,我们需要通过OrderClose(....)关闭循环中的所有订单。就确定当前的利润而言,根据所设定的任务,可能会有变化。如果你看每个账户的利润,你可以简单地采取AccountProfit(),但可能更费力的方式是通过一个周期(那么你可以只计算必要订单的利润)。extern double lots = 0.01; extern int stop_loss = 0; extern int take_profit = 0; int last_bar = 0; int start(){ if (last_bar == Bars) return(0); last_bar = Bars; if (OrdersTotal() == 0){ OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, Bid - stop_loss * Point, Ask + take_profit * Point, "", 1, 0, clrBlue); OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, Ask+ stop_loss * Point, Bid - take_profit * Point, "", 1, 0, clrRed); } return(0); } double profit=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */) { profit+=OrderProfit()+OrderSwap()+OrderCommission(); } } Dmitriy Gizlyk 2016.02.11 14:32 #26 GIM: 如果止损和止盈的货币是存款的货币。 extern double lots = 0.01; extern int stop_loss = 10; /* Указываем в валюте депозита */ extern int take_profit = 20; /* Указываем в валюте депозита */ extern int Magic = 1; int last_bar = 0; int start(){ if (last_bar == Bars) return(0); last_bar = Bars; if (OrdersTotal() == 0){ OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, 0, 0, "", Magic, 0, clrBlue); OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, 0, 0, "", Magic, 0, clrRed); } double profit=0; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic) { profit+=OrderProfit()+OrderSwap()+OrderCommission(); } } int requot=0; if(profit>=take_profit || (-profit)>=stop_loss) for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic) { if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrRed)) requot=0; else { requot++; } if(requot>10) { i++; requot=0; } i--; } } return(0); } GIM 2016.02.11 14:39 #27 Dmitriy Gizlyk: 如果在存款货币 中指定了止损和止盈 for(int i=0;i<OrdersTotal();i++)错误:"i" GIM 2016.02.13 17:57 #28 谁知道呢? extern int Magic = 1; что означает?? [删除] 2016.02.13 18:01 #29 GIM: 谁知道呢 专家顾问订单的标识符,这样它就只对自己的订单起作用。 GIM 2016.02.13 18:05 #30 Vladimir Zubov:专家顾问订单的标识符,这样它就只对自己的订单起作用。 你的意思是,只用自己的订单.... 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果你只想开单,那么指定0而不是SL / TP。如果SL或TP为0,你将不得不在你的请求中输入0,如果你输入一个值,你将不得不计算出订单关闭的价格。
对于GIM
如果你只想开单,那么指定0而不是SL / TP。对于未来,你必须检查:如果SL或TP是0,那么你必须在请求中指定0。 如果你指定一个值,那么计算订单的收盘价。
阅读日志。也许那里有关于在编译时没有检测到的错误的信息。
这里有一个错误 OrderSend(Symbol(,OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE)。
你需要做以下工作 OrderSend(Symbol(),OP_SELL,Lots,Bid,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE) 。
当你卖出时,止损应该在当前价格之上,而拿货则在下面。 在你的案例中,恰恰相反,你把止损放在价格之下,而拿货则在上面。
我想让专家顾问按所有交易的总利润开仓和平仓....。
在这种情况下,开仓时,把SL=0,TP=0。
为了关闭一个头寸,我们需要在每个tick上将获得的利润与设定的值进行比较。而当利润达到指定值时,我们需要通过OrderClose(....)关闭循环中的所有订单。
就确定当前的利润而言,根据所设定的任务,可能会有变化。如果你看账户的利润,你可以简单地采取AccountProfit(),但更费力的方式可能是通过一个循环(那么我们可以只计算必要订单的利润)。
在这种情况下,开仓时,把SL=0,TP=0。
为了关闭一个头寸,我们需要在每个tick上将获得的利润与设定的值进行比较。而当利润达到指定值时,我们需要通过OrderClose(....)关闭循环中的所有订单。
就确定当前的利润而言,根据所设定的任务,可能会有变化。如果你看每个账户的利润,你可以简单地采取AccountProfit(),但可能更费力的方式是通过一个周期(那么你可以只计算必要订单的利润)。
如果在存款货币 中指定了止损和止盈
for(int i=0;i<OrdersTotal();i++)
错误:"i"
谁知道呢
专家顾问订单的标识符,这样它就只对自己的订单起作用。
专家顾问订单的标识符,这样它就只对自己的订单起作用。