新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 475 1...468469470471472473474475476477478479480481482...1953 新评论 Rewerpool 2018.02.21 17:34 #4741 @Artyom Trishkin@Konstantin Nikitin 告诉我, 通过int start 轮询void NOTIFICATION() 函数是否正确 ?那里有一个持续的循环!也许把这个逻辑直接放到启动中会更正确?所以不要让函数过载!而我最初写的时候,是为了让自己读起来更顺口! Artyom Trishkin 2018.02.21 17:40 #4742 Rewerpool:@Artyom Trishkin@Konstantin Nikitin 告诉我, 通过int start 轮询void NOTIFICATION() 函数是否正确 ?那里有一个持续的循环!也许把这个逻辑一次性投入到启动中去会更符合逻辑? 使用OnTick()。这一切都取决于所需的逻辑。 Vladimir Ozharovskiy 2018.02.21 17:50 #4743 请告诉我在哪里插入这个?//+------------------------------------------------------------------+//| Проверяет объем ордера на корректность | //+------------------------------------------------------------------+ bool CheckVolumeValue(double volume,string &description) { //--- минимально допустимый объем для торговых операций double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); if(volume<min_volume) { description=StringFormat("Объем меньше минимально допустимого SYMBOL_VOLUME_MIN=%.2f",min_volume); return(false); } //--- максимально допустимый объем для торговых операций double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); if(volume>max_volume) { description=StringFormat("Объем больше максимально допустимого SYMBOL_VOLUME_MAX=%.2f",max_volume); return(false); } //--- получим минимальную градацию объема double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP); int ratio=(int)MathRound(volume/volume_step); if(MathAbs(ratio*volume_step-volume)>0.0000001) { description=StringFormat("Объем не является кратным минимальной градации SYMBOL_VOLUME_STEP=%.2f, ближайший корректный объем %.2f", volume_step,ratio*volume_step); return(false); } description="Корректное значение объема"; return(true); } Vladimir Ozharovskiy 2018.02.21 18:08 #4744 专家顾问代码本身 enum t{e=1,//通过抛物线指标};enum tf{af=0, // 当前bf=1, // 1分钟cf=2, // 5分钟df=3, // 15分钟ef=4, // 30分钟ff=5, // 1小时gf=6, // 4小时hf=7, // 1天};外置 int Magic = 123654789;外部inttern Slippage = 0;inttern double Lots = 1;外部int int rsi_period = 14;外来的int rsi_high = 50;int rsi_price = PRICE_CLOSE;外来的int rsi_low = 50;int loss_stop = 5000。extern int take_profit = 5000;double sar_step = 0.03;double sar_max = 0.03;int GeneralNoLoss = false; // 从盈亏平衡点开始跟踪。int parameters_trailing = e; // trawl方法int StartTrall = -5000; //最小拖网利润,单位:分int StepTrall = 1; //步进式跟踪止损输入tf TF_Tralling = af; // 指标时间框架(0-当前)。extern int delta = 50; // 从计算的止损水平缩进。double Step = 0.03; //抛物线步骤(方法4)。double Maximum = 0.03; //抛物线最大值(方法4)。color text_color = Lime; //信息输出的颜色双马,rsi,sar_1,sar_2,ma_1,ma_2,ma_3,ma_4,ma_5,ma_6。datetime LastBuyTime, LastSellTime;int STOPLEVEL。int TF[10]={0,1,5,15,30,60,240,1440,10080,43200};双重SLB=0,SLS=0。int OnInit(){//---//---return(0);}空白的OnTick(){STOPLEVEL=(int)MarketInfo(Symbol(),MODE_STOPLEVEL)。int b=0,s=0。双重OOP,price_b=0,price_s=0,lot=0,NLb=0,NLs=0,LS=0,LB=0。int tip,Ticket;bool error。双SL,OSL。int n=0。如果(b==0)SLB=0。如果(s==0)SLS=0。for (int i=OrdersTotal(); i>=0; i--){如果(OrderSelect(i, SELECT_BY_POS)==true)。{tip = OrderType()。如果(提示<2 && (OrderSymbol()==Symbol())&& (OrderMagicNumber()==Magic )){OSL = OrderStopLoss()。OOP = OrderOpenPrice()。Ticket = OrderTicket()。n++;如果(tip==OP_BUY){如果 (GeneralNoLoss){SL = SlLastBar(OP_BUY,Bid,NLb)。如果(SL < NLb+StartTrall*Point)继续。}否则{SL = SlLastBar(OP_BUY,Bid,OOP)。如果(SL < OOP+StartTrall*Point)继续。}//如果(OSL >= OOP && only_NoLoss)继续。如果(SL >= OSL + StepTrall*Point && (Bid-SL)/Point>STOPLEVEL){error=OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,White);if (!error) Comment("TrailingStop Error",GetLastError()," order ",Ticket," SL ",SL);else Comment("TrailingStop",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES))。}}如果(tip==OP_SELL){如果 (GeneralNoLoss){SL = SlLastBar(OP_SELL,Ask,NLs)。如果(SL>NLs-StartTrall*Point)继续。}否则{SL = SlLastBar(OP_SELL,Ask,OOP)。如果(SL>OOP-StartTrall*Point)继续。}//如果(OSL <= OOP && only_NoLoss)继续。如果((SL <= OSL-StepTrall*Point || OSL==0) && (SL-Ask)/Point>STOPLEVEL){error=OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,White);if (!error) Comment("TrailingStop Error",GetLastError()," order ",Ticket," SL ",SL);else Comment("TrailingStop",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES))。}}}}}ma = iMA(Symbol(), 0, 70, 0, MODE_SMA, PRICE_CLOSE, 1);rsi = iRSI(Symbol(), 0, rsi_period, rsi_price, 1);sar_1 = iSAR(Symbol(), 0, sar_step, sar_max, 1);sar_2 = iSAR(Symbol(), 0, sar_step, sar_max, 2);如果((sar_step)){LastBuyTime = Time[0];如果(OrderSend(Symbol(, OP_BUY, Lots, NormalizeDouble(Ask,Digits), Slippage, Ask - loss_stop*Point, Ask + take_profit*Point, "Order", Magic, 0, clrGreen) > 0){Print("Buy Order has been sent!");返回。}else Print("Buy Order Error")。}如果((hhchhchhchh)){LastSellTime = Time[0];如果(OrderSend(Symbol(), OP_SELL, Lots, NormalizeDouble(Bid, Digits), Slippage, Bid + loss_stop*Point, Bid - take_profit*Point, "Order", Magic, 0, clrRed) > 0){Print("Sell Order has been sent!");返回。}else Print("卖出订单错误")。}}//--------------------------------------------------------------------double SlLastBar(int tip,double price,double OOP){double prc=0。switch(parameters_trailing){案例1://通过抛物线指标prc = iSAR(Symbol(),TF[TF_Tralling],Step, Maximum,0);如果(tip==OP_BUY){prc = NormalizeDouble(prc - delta*Point,Digits)。如果(price-STOPLEVEL*Point < prc) prc=0;ARROW("cm_SL_Buy", prc, 4, clrAqua)。}如果(tip==OP_SELL){prc = NormalizeDouble(prc + delta*Point,Digits)。如果(价格+STOPLEVEL*Point > prc) prc=0;ARROW("cm_SL_Sell", prc, 4, clrRed)。}突破。}return(prc)。}//--------------------------------------------------------------------字符串StrPer(int per){如果(per == 0) per=Period()。如果(per == 1)返回("M1")。如果(per == 5)返回("M5")。如果(per == 15)返回("M15")。如果(per == 30)返回("M30")。如果(per == 60)返回("H1")。如果(per == 240)返回("H4")。如果(per == 1440)返回("D1")。if (per == 10080) return("W1")如果(per == 43200)返回("MN1")。return("period error")。}//+------------------------------------------------------------------+void ARROW(string Name, double Price, int ARROWCODE, color c){ObjectDelete(Name)。ObjectCreate(Name,OBJ_ARROW,0,Time[0],Price,0,0,0)。ObjectSetInteger(0,Name,OBJPROP_ARROWCODE,ARROWCODE)。ObjectSetInteger(0,Name,OBJPROP_SELECTABLE, false)。ObjectSetInteger(0,Name,OBJPROP_SELECTED, false)。ObjectSetInteger(0,Name,OBJPROP_COLOR, c)。ObjectSetInteger(0,Name,OBJPROP_WIDTH, 1)。}//--------------------------------------------------------------------color Color(bool P,color a,color b){如果(P)返回(a)。返回(b)。}//-------------------------------------------------------------------- Any questions from newcomers 完善顾问的战略 我将写一个免费的mql4顾问 Alekseu Fedotov 2018.02.21 18:09 #4745 Vladimir Ozharovskiy: 你能告诉我在哪里插入这个吗?//+------------------------------------------------------------------+Well....如果如此关键 使之如此。 //+------------------------------------------------------------------+ //| Проверяет объем ордера на корректность | //+------------------------------------------------------------------+ 很好......))) Vladimir Ozharovskiy 2018.02.21 18:12 #4746 Alekseu Fedotov:Well....如果如此关键 使之如此。 (漂亮......))。但是,说真的?) Alekseu Fedotov 2018.02.21 18:21 #4747 Vladimir Ozharovskiy:但是说真的?)如果你指的是函数本身,把它复制并粘贴到程序的最末尾。 必须在无效的OnTick()函数之外。 Rewerpool 2018.02.21 18:30 #4748 Vladimir Ozharovskiy:但是,说真的?)我认为这个功能没有竞标,检查和报告 Rewerpool 2018.02.21 18:32 #4749 Alekseu Fedotov:如果你指的是函数本身,把它复制并粘贴到程序的末尾。 确保它是在void OnTick()函数之外。然后,一个人应该怎么做?你必须正确称呼它! Vladimir Ozharovskiy 2018.02.21 19:14 #4750 这似乎有帮助...谢谢你! 1...468469470471472473474475476477478479480481482...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
@Artyom Trishkin@Konstantin Nikitin
告诉我, 通过int start 轮询void NOTIFICATION() 函数是否正确 ?那里有一个持续的循环!也许把这个逻辑直接放到启动中会更正确?所以不要让函数过载!而我最初写的时候,是为了让自己读起来更顺口!
@Artyom Trishkin@Konstantin Nikitin
告诉我, 通过int start 轮询void NOTIFICATION() 函数是否正确 ?那里有一个持续的循环!也许把这个逻辑一次性投入到启动中去会更符合逻辑?
专家顾问代码本身
你能告诉我在哪里插入这个吗?//+------------------------------------------------------------------+
Well....如果如此关键
使之如此。
很好......)))
Well....如果如此关键
使之如此。
(漂亮......))。
但是,说真的?)
但是说真的?)
如果你指的是函数本身,把它复制并粘贴到程序的最末尾。
必须在无效的OnTick()函数之外。
但是,说真的?)
我认为这个功能没有竞标,检查和报告
如果你指的是函数本身,把它复制并粘贴到程序的末尾。
确保它是在void OnTick()函数之外。
然后,一个人应该怎么做?你必须正确称呼它!