EA: 智能系统 Ichimoku - 页 2 123 新评论 amin ghanbari 2021.10.08 12:51 #11 Vladimir Karputov #:启用代码调试和逐步测试。 感谢您的回复。 我进行了调试,发现是高点差导致的不正确 SL 引起了这个问题。 Vladimir Karputov 2021.10.08 12:54 #12 amin ghanbari # :感谢您的回复。我进行了调试,发现是高点差导致的不正确 SL 引起了这个问题。 Expert Advisor 中的代码是正确的,但如果在下单时价格出现大幅波动,则不会打开仓位。 amin ghanbari 2021.10.10 21:59 #13 Vladimir Karputov #:Expert Advisor 中的代码是正确的,但如果在下单时价格出现大幅波动,则不会打开仓位。 我认为这部分应该针对 crypo 进行修改: //--- 调整 3 或 5 位数 int digits_adjust=1; if(m_symbol.Digits()==3 || m_symbol.Digits()==5) digits_adjust=10; m_adjusted_point=m_symbol.Point()*digits_adjust; ExtStopLoss = InpStopLoss * m_adjusted_point; ExtTakeProfit = InpTakeProfit * m_adjusted_point; ExtTrailingStop= InpTrailingStop * m_adjusted_point; ExtTrailingStep= InpTrailingStep * m_adjusted_point; 当我使用 RISK 来确定手数时,会出现 getpointer 错误,我必须使用 fix LOT: //+------------------------------------------------------------------+ //| 自由保证金交易的手数或风险(百分比) //| 自由保证金交易的手数或风险(百分比) //| 自由保证金交易的手数或风险(百分比) //... //+------------------------------------------------------------------+ bool LotsOrRisk(const double lots,const double risk,const int digits_adjust) { if(lots<0.0 && risk<0.0) { Print(__FUNCTION__,", ERROR: Parameter (\"lots\" or \"risk\") can't be less than zero"); return(false); } if(lots==0.0 && risk==0.0) { Print(__FUNCTION__,", ERROR: Trade is impossible: You have set \"lots\" == 0.0 and \"risk\" == 0.0"); return(false); } if(lots>0.0 && risk>0.0) { Print(__FUNCTION__,", ERROR: Trade is impossible: You have set \"lots\" > 0.0 and \"risk\" > 0.0"); return(false); } if(lots>0.0) { string err_text=""; if(!CheckVolumeValue(lots,err_text)) { Print(__FUNCTION__,", ERROR: ",err_text); return(false); } } else if(risk>0.0) { if(m_money!=NULL) delete m_money; m_money=new CMoneyFixedMargin; if(m_money!=NULL) { if(!m_money.Init(GetPointer(m_symbol),Period(),m_symbol.Point()*digits_adjust)) return(false); m_money.Percent(risk); } else { Print(__FUNCTION__,", ERROR: Object CMoneyFixedMargin is NULL"); return(false); } } //--- return(true); } //+------------------------------------------------------------------+ Vladimir Karputov 2021.10.11 04:47 #14 amin ghanbari # :***当我使用 RISK 检测地段时,我看到 getpointer 错误,我必须使用 fix LOT: 你看到了自己的错误 - 想想:你设置的风险值是多少? Vladimir Karputov 2021.10.11 04:53 #15 备注:如果您使用的是有巨大点差的工具,您必须设置适当的止损。 始终牢记 - 有两个价格:卖出价和买入价。 amin ghanbari 2021.10.11 23:57 #16 Vladimir Karputov #:你看到了自己的错误--想一想:你设定的风险值是多少? 问题出在余额不足和点差过 大导致单边单利 不 正确 。 我为 500 美元的余额设置了 1%的风险,杠杆设置为 100: OpenBuy, ERROR: method CheckOpenLong 打开卖出,ERROR: 方法 CheckOpenShort 这意味着该余额不足以以 BTC 为单位开立最小手数的头寸? 是真的吗? Vladimir Karputov 2021.10.12 04:31 #17 amin ghanbari # :问题是由于余额不足, 以及 由于抱团传播造成不正确的 SL。我为 500 美元的余额设置了 1%的风险,杠杆设置为 100:OpenBuy, ERROR: method CheckOpenLong OpenSell, ERROR: 方法 CheckOpenShort这意味着该余额不足以以 BTC 为单位开立最小手数的头寸?是真的吗? 你发现了自己的错误。现在想想如何纠正错误。 Mahmoud Ahmed Mahmoud Fahmy 2021.10.14 16:00 #18 你好,弗拉基米尔 感谢您分享专家意见,我正试图添加一个条件,以便在条形图收盘超过云层时平仓,这就是我添加的代码,您能帮帮我吗? Vladimir Karputov 2021.10.14 17:39 #19 Mahmoud Ahmed Mahmoud Fahmy # :你好,弗拉基米尔感谢您分享专家意见,我正试图添加一个条件,以便在条形图收盘超过云层时平仓,这就是我添加的代码,您能帮帮我吗,拜托了,我是 mql5 的新手 请正确插入代码:首先按 按钮 ,然后在弹出窗口中粘贴代码。 Mahmoud Ahmed Mahmoud Fahmy 2021.10.14 19:53 #20 Vladimir Karputov #:请正确插入代码:首先按下 按钮 ,然后在弹出窗口中粘贴代码。 您好 非常感谢你的回复,很抱歉我做得一团糟,我对上一篇文章的代码做了一些修改,但仍然没有平仓,而且我设置了 stoploss = 0。 double Kij2=iIchimokuGet(KIJUNSEN_LINE,3); double SpanA2=iIchimokuGet(SENKOUSPANA_LINE,3); double SpanB2=iIchimokuGet(SENKOUSPANB_LINE,3); double Chinkou2=iIchimokuGet(CHIKOUSPAN_LINE,3); //关闭指令 // m_trade.PositionClose(m_symbol.Name()); //购买订单 // { // if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY ) // { // if(iClose(_Symbol,Period(),1) < SpanB) // { //m_trade.PositionClose(_Symbol); // } // } // } //销售订单 // if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) // { // if(iClose(_Symbol,Period(),1) > SpanB) // { // m_trade.PositionClose(_Symbol); //} // } // if(m_trade.ResultRetcode()==10008 || m_trade.ResultRetcode()==10009)//请求已完成或已下单 // { // Print("Exit rules:已成功下达平仓指令,票号为:",m_trade.ResultOrder()); // } //否则 // { // Print("Exit rules:平仓指令请求无法完成。错误:",GetLastError()); // ResetLastError(); //return; // } // } // } // } //-----------------------------检查买 if (iClose(_Symbol,PERIOD_D1,1) < iClose(_Symbol,PERIOD_D1,2) && iHigh(_Symbol,PERIOD_H4,2) - iLow(_Symbol,PERIOD_H4,2) > iHigh(_Symbol,PERIOD_H4,1)- iLow(_Symbol,PERIOD_H4,2) ) { if (iOpen(m_symbol.Name(),Period(),0) > Kij && iOpen(m_symbol.Name(),Period(),0) > SpanA) // if(Ten1<=Kij1 && Ten>Kij && //&& m_symbol.Ask()>SpanA1 //&& m_symbol.Ask()>SpanB1 &&& // iOpen(m_symbol.Name(),Period(),1)<iClose(m_symbol.Name(),Period(),1)) //||| //(Chinkou1<=iClose(m_symbol.Name(),Period(),11) && Chinkou>iClose(m_symbol.Name(),Period(),10) && // m_symbol.Ask()>SpanA1 && m_symbol.Ask()>SpanB1 && // iOpen(m_symbol.Name(),Period(),1)<iClose(m_symbol.Name(),Period(),1)) { double sl=(InpStopLoss==0)?0.0:m_symbol.Ask()-ExtStopLoss; if(sl>=m_symbol.Bid()) // 事件:仓位尚未打开,必须已经关闭 { PrevBars=0; return; } double tp=(InpTakeProfit==0)?0.0:m_symbol.Ask()+ExtTakeProfit; if(iClose(_Symbol,Period(),1) < SpanB) { if(m_position.Select(_Symbol)) //如果该符号的位置已经存在 { if(m_position.PositionType()==POSITION_TYPE_BUY) m_trade.PositionClose(_Symbol); //这是一个买入仓位,然后平仓 // if(m_Position.PositionType()==POSITION_TYPE_SELL) return; } } OpenBuy(sl,tp); } } //--- 检查销售 if (iClose(_Symbol,PERIOD_D1,1) > iClose(_Symbol,PERIOD_D1,2) && iHigh(_Symbol,PERIOD_D1,2) - iLow(_Symbol,PERIOD_H4,2) > iHigh(_Symbol,PERIOD_H4,1)- iLow(_Symbol,PERIOD_H4,2) ) { if(iOpen(m_symbol.Name(),Period(),0) < Kij && iOpen(m_symbol.Name(),Period(),0) < SpanB) // if(Ten1>Kij1 && Ten<Kij && //&& m_symbol.Bid()<SpanA1 && m_symbol.Bid()<SpanB1 && // iOpen(m_symbol.Name(),Period(),1)>iClose(m_symbol.Name(),Period(),1)) //||| //(Chinkou1>=iOpen(m_symbol.Name(),Period(),11) && Chinkou<iOpen(m_symbol.Name(),Period(),10) && //m_symbol.Bid()<SpanA1 && m_symbol.Bid()<SpanB1 && //iOpen(m_symbol.Name(),Period(),1)>iClose(m_symbol.Name(),Period(),1))) { double sl=(InpStopLoss==0)?0.0:m_symbol.Bid()+ExtStopLoss; if(sl<=m_symbol.Ask()) // 事件:仓位尚未打开,必须已经关闭 { PrevBars=0; return; } double tp=(InpTakeProfit==0)?0.0:m_symbol.Bid()-ExtTakeProfit; if(iClose(_Symbol,Period(),1) > SpanB) { if(m_position.Select(_Symbol)) //如果该符号的位置已经存在 { if(m_position.PositionType()==POSITION_TYPE_SELL) m_trade.PositionClose(_Symbol); //这是一个买入仓位,然后平仓 // if(m_Position.PositionType()==POSITION_TYPE_SELL) return; } } OpenSell(sl,tp); } } // m_trade.PositionClose(_Symbol); } 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
启用代码调试和逐步测试。
感谢您的回复。
我进行了调试,发现是高点差导致的不正确 SL 引起了这个问题。
感谢您的回复。
我进行了调试,发现是高点差导致的不正确 SL 引起了这个问题。
Expert Advisor 中的代码是正确的,但如果在下单时价格出现大幅波动,则不会打开仓位。
Expert Advisor 中的代码是正确的,但如果在下单时价格出现大幅波动,则不会打开仓位。
我认为这部分应该针对 crypo 进行修改:
当我使用 RISK 来确定手数时,会出现 getpointer 错误,我必须使用 fix LOT:
***
当我使用 RISK 检测地段时,我看到 getpointer 错误,我必须使用 fix LOT:
你看到了自己的错误 - 想想:你设置的风险值是多少?
备注:如果您使用的是有巨大点差的工具,您必须设置适当的止损。
始终牢记 - 有两个价格:卖出价和买入价。
你看到了自己的错误--想一想:你设定的风险值是多少?
问题出在余额不足和点差过 大导致单边单利 不 正确 。
我为 500 美元的余额设置了 1%的风险,杠杆设置为 100:
OpenBuy, ERROR: method CheckOpenLong
打开卖出,ERROR: 方法 CheckOpenShort
这意味着该余额不足以以 BTC 为单位开立最小手数的头寸?
是真的吗?
问题是由于余额不足, 以及 由于抱团传播造成不正确的 SL。
我为 500 美元的余额设置了 1%的风险,杠杆设置为 100:
OpenBuy, ERROR: method CheckOpenLong
OpenSell, ERROR: 方法 CheckOpenShort
这意味着该余额不足以以 BTC 为单位开立最小手数的头寸?
是真的吗?
你发现了自己的错误。现在想想如何纠正错误。
你好,弗拉基米尔
感谢您分享专家意见,我正试图添加一个条件,以便在条形图收盘超过云层时平仓,这就是我添加的代码,您能帮帮我吗?
你好,弗拉基米尔
感谢您分享专家意见,我正试图添加一个条件,以便在条形图收盘超过云层时平仓,这就是我添加的代码,您能帮帮我吗,拜托了,我是 mql5 的新手
请正确插入代码:首先按
按钮 ,然后在弹出窗口中粘贴代码。
请正确插入代码:首先按下 按钮 ,然后在弹出窗口中粘贴代码。
您好
非常感谢你的回复,很抱歉我做得一团糟,我对上一篇文章的代码做了一些修改,但仍然没有平仓,而且我设置了 stoploss = 0。