新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 192 1...185186187188189190191192193194195196197198199...1953 新评论 Artyom Trishkin 2017.05.04 09:51 #1911 d1w4m3: 谢谢你的回答,但我才刚刚开始学习了几个星期,如何在代码中实现这个问题,或者告诉我在哪里可以读到,谢谢。还是根据伊戈尔-金的说法?而它却会开出一个位置,不按照系统的要求,在刚开始工作的时候,你的条件并不能避免这个问题。如果你想一想?为什么不避开这个问题?当他开始工作时,如果他之前没有工作(一般来说是第一次运行),那么还没有他的头寸,逻辑上会显示,最后关闭的头寸 根本还不存在。这意味着它不可能在停止或采取时被关闭,这反过来又允许在信号上开立头寸。 不是吗? d1w4m3 2017.05.04 13:27 #1912 Artyom Trishkin:如果你想一想?为什么不避开这个问题?当它开始工作时,如果它以前没有工作过(第一次运行根本没有),那么它的位置还没有出现,逻辑上会显示最后关闭的位置 根本还没有出现。这意味着它不可能在停止或采取时被关闭,这反过来又允许在信号上开仓。 不是吗? 这就是事情的真相:通过信号!但这个条件可能不是在第2条(只要指标改变了缓冲区),而是在任何第2条(当然在这之后一切都通过系统运作)满足。问题出在开单的条件上,如何在指标缓冲区变化后的第2条上解决这个问题?空白的OnTick(){uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4)。dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4);如果(DN_Trend()==true){ 如果(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr){ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);如果 (ticket > 0){SL = NormalizeDouble(Bid + StopLoss*Point, Digits)。TP = NormalizeDouble(Bid - TakeProfit*Point, Digits)。如果(OrderSelect(ticket, SELECT_BY_TICKET))if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))Print("Sales error");}} Any questions from newcomers 初学者的问题 MQL4 MT4 MetaTrader 错误、漏洞、问题 Artyom Trishkin 2017.05.04 13:59 #1913 d1w4m3: 好吧,关键是它是基于信号的!但这个条件可能不是在第二条杠上满足(只要指标改变了缓冲区),而是在任何第二条杠上满足(在那之后,当然一切都在系统中运作)。问题出在开单的条件上,如何在指标缓冲区变化后的第2条上解决这个问题?空白的OnTick(){uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4)。dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4);如果(DN_Trend()==true){ 如果(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr){ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);如果 (ticket > 0){SL = NormalizeDouble(Bid + StopLoss*Point, Digits)。TP = NormalizeDouble(Bid - TakeProfit*Point, Digits)。如果(OrderSelect(ticket, SELECT_BY_TICKET))if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))Print("Sales error");}} 正确插入代码。在信息编辑器 菜单中,有一个SRC按钮。我没有从你的解释中明白什么。 Alexey Viktorov 2017.05.04 14:02 #1914 d1w4m3: 这就是问题的关键!但这个条件可能不是在第2条(只要指标改变了缓冲区),而是在任何第2条(当然在这之后一切都在系统中运作)满足。问题出在开单的条件上,如何在指标缓冲区变化后的第2条上解决这个问题?void OnTick() { uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4); dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4); if(DN_Trend()==true) { if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { SL = NormalizeDouble(Bid + StopLoss*Point, Digits); TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на продажу"); } }1.如果正确插入,这就是代码的样子。开发人员想出这个办法是有原因的......。2.一个微妙的提示:Open[4]和Close[4]相对于指标值的位置? d1w4m3 2017.05.04 15:00 #1915 extern int TakeProfit = 200; extern double Lots = 0.1; extern int StopLoss = 52; extern int Magic = 1111; extern int Slippage = 3; extern int n = 3; // На какую свечу открывать ордер //------------------------------------------------------------------ extern int LevelWLoss = 1; // Уровень безубытка extern int LevelProfit = 30; // Уровень профита //------------------------------------------------------------------ extern string Slope = "Параметры Slope"; extern int period = 163; extern int method = 3; extern int price = 0; //------------------------------------------------------------------ double uptr, SL, TP, dntr; int ticket, nd; bool fm; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if (Digits == 3 || Digits == 5) { TakeProfit *=10; StopLoss *=10; Slippage *=10; LevelWLoss *=10; LevelProfit *=10; } return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4); dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4); if(DN_Trend()==true) { if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red); if (ticket > 0) { SL = NormalizeDouble(Bid + StopLoss*Point, Digits); TP = NormalizeDouble(Bid - TakeProfit*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на продажу"); } } }//if(DN_Trend()==true) if(UP_Trend()==true) { if( CountBuy() == 0 && Ask > uptr && Open[3] > uptr && Close[3] > uptr ) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Sloper", Magic, 0, Blue); if (ticket>0) { TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); SL = NormalizeDouble(Ask - StopLoss*Point, Digits); if (OrderSelect(ticket, SELECT_BY_TICKET)) if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка на покупку"); } } }//if(UP_Trend()==true) if ( CountSell()>0 && Open[3] > uptr && Close[3] > uptr && UP_Trend()==true) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderType() == OP_SELL) if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black)) Print("Ошибка"); } } } if ( CountBuy()>0 && Open[3] < dntr && Close[3] < dntr && DN_Trend()==true) { for(int i = OrdersTotal() -1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black)) Print("Ошибка"); } } } //+переход в безубыток+ for( int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()== Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { if(OrderStopLoss()-OrderOpenPrice()<LevelWLoss*Point) { if(Bid-OrderOpenPrice()>LevelProfit*Point) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+LevelWLoss*Point,OrderTakeProfit(),CLR_NONE); } } } } if(OrderType()==OP_SELL) { if(OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*Point) { if(OrderOpenPrice()-Ask>LevelProfit*Point) { fm=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-LevelWLoss*Point,OrderTakeProfit(),CLR_NONE); } } } } } //------------ комментарии -----------------+ if(UP_Trend()) Comment("Восходящий тренд ", uptr); if(DN_Trend()) Comment("Нисходящий тренд ", dntr); } //+------------------------------------------------------------------+ int CountSell() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) count++; } } return(count); } //+------------------------------------------------------------------+ int CountBuy() { int count = 0; for (int trade = OrdersTotal()-1; trade>=0; trade--) { if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) count++; } } return(count); } //+------------------------------------------------------------------+ bool UP_Trend() { if(uptr > 0 && uptr != 2147483647.0) return(true); return(false); } //+------------------------------------------------------------------+ bool DN_Trend() { if(dntr > 0 && dntr != 2147483647.0) return(true); return(false); } //+------------------------------------------------------------------+ d1w4m3 2017.05.04 15:05 #1916 如果我们插入你的条件" 这意味着它无法在停止或采取的时候关闭,这反过来又允许在信号上开仓。"我的信号是"if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)"(连同指标n=3的转变)。事实证明,如果它被立即放在图表上,它将在下降趋势 中打开,从第3根蜡烛开始的那一刻起,然后,如果有一个信号,它将根据需要打开。 Artyom Trishkin 2017.05.04 18:57 #1917 d1w4m3:如果我们插入你的条件" 这意味着它无法在停止或采取的时候关闭,这反过来又允许在信号上开仓。"我的信号是"if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)"(连同指标n=3的转变)。事实证明,如果它被立即放在图表上,它将在第三根蜡烛开始的时刻在下降趋势 中打开,然后,如果有一个信号,它将根据需要打开。我什么都不明白。你有什么不明白的地方?你不能确定最后一个头寸是在停止或采取时关闭的?你不能在你的代码中找到检查这个条件的地方?或者你不能做什么? 它怎么能在第三根蜡烛上打开呢? 或者解释一下"它将在第三根蜡烛上打开 " 是什么意思?这到底是什么意思? d1w4m3 2017.05.05 03:30 #1918 每次在某个指标信号上开盘,我如何在一个变量中存储这个信号的类型?有一个错误(当我运行EA时),订单没有在趋势开始时打开(不是根据指标颜色的变化),因为我的条件没有提到具体的蜡烛,而是说如果趋势是向上或向下,在3根蜡烛的开始时打开。 Maxim Shershnev 2017.05.05 13:31 #1919 大家下午好。我想知道如何在EXCEl中分析工作统计数据。谁能告诉我什么可以通过DDE从mt4拉出来,以及我在哪里可以得到所有允许的函数来转移到excel中?将非常感谢您的帮助 Alexey Viktorov 2017.05.05 15:14 #1920 Maxim Shershnev:大家下午好。我想知道如何在EXCEl中分析工作统计数据。谁能告诉我什么可以通过DDE从mt4中提取,以及我在哪里可以得到所有允许的函数来转移到excel中?将非常感谢您的帮助 你所需要的一切都在这里 。.csv记录格式可写到excel中 Файловые операции - Справочник MQL4 docs.mql4.com Файловые операции - Справочник MQL4 1...185186187188189190191192193194195196197198199...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
谢谢你的回答,但我才刚刚开始学习了几个星期,如何在代码中实现这个问题,或者告诉我在哪里可以读到,谢谢。还是根据伊戈尔-金的说法?
而它却会开出一个位置,不按照系统的要求,在刚开始工作的时候,你的条件并不能避免这个问题。
如果你想一想?为什么不避开这个问题?
当他开始工作时,如果他之前没有工作(一般来说是第一次运行),那么还没有他的头寸,逻辑上会显示,最后关闭的头寸 根本还不存在。这意味着它不可能在停止或采取时被关闭,这反过来又允许在信号上开立头寸。
不是吗?
如果你想一想?为什么不避开这个问题?
当它开始工作时,如果它以前没有工作过(第一次运行根本没有),那么它的位置还没有出现,逻辑上会显示最后关闭的位置 根本还没有出现。这意味着它不可能在停止或采取时被关闭,这反过来又允许在信号上开仓。
不是吗?
这就是事情的真相:通过信号!但这个条件可能不是在第2条(只要指标改变了缓冲区),而是在任何第2条(当然在这之后一切都通过系统运作)满足。问题出在开单的条件上,如何在指标缓冲区变化后的第2条上解决这个问题?
空白的OnTick()
}
好吧,关键是它是基于信号的!但这个条件可能不是在第二条杠上满足(只要指标改变了缓冲区),而是在任何第二条杠上满足(在那之后,当然一切都在系统中运作)。问题出在开单的条件上,如何在指标缓冲区变化后的第2条上解决这个问题?
空白的OnTick()
}
这就是问题的关键!但这个条件可能不是在第2条(只要指标改变了缓冲区),而是在任何第2条(当然在这之后一切都在系统中运作)满足。问题出在开单的条件上,如何在指标缓冲区变化后的第2条上解决这个问题?
1.如果正确插入,这就是代码的样子。开发人员想出这个办法是有原因的......。
2.一个微妙的提示:Open[4]和Close[4]相对于指标值的位置?
如果我们插入你的条件" 这意味着它无法在停止或采取的时候关闭,这反过来又允许在信号上开仓。"
我的信号是"if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)"(连同指标n=3的转变)。
事实证明,如果它被立即放在图表上,它将在下降趋势 中打开,从第3根蜡烛开始的那一刻起,然后,如果有一个信号,它将根据需要打开。
如果我们插入你的条件" 这意味着它无法在停止或采取的时候关闭,这反过来又允许在信号上开仓。"
我的信号是"if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)"(连同指标n=3的转变)。
事实证明,如果它被立即放在图表上,它将在第三根蜡烛开始的时刻在下降趋势 中打开,然后,如果有一个信号,它将根据需要打开。
我什么都不明白。你有什么不明白的地方?你不能确定最后一个头寸是在停止或采取时关闭的?你不能在你的代码中找到检查这个条件的地方?
或者你不能做什么?
它怎么能在第三根蜡烛上打开呢? 或者解释一下"它将在第三根蜡烛上打开 " 是什么意思?这到底是什么意思?每次在某个指标信号上开盘,我如何在一个变量中存储这个信号的类型?
有一个错误(当我运行EA时),订单没有在趋势开始时打开(不是根据指标颜色的变化),因为我的条件没有提到具体的蜡烛,而是说如果趋势是向上或向下,在3根蜡烛的开始时打开。
大家下午好。
我想知道如何在EXCEl中分析工作统计数据。
谁能告诉我什么可以通过DDE从mt4拉出来,以及我在哪里可以得到所有允许的函数来转移到excel中?
将非常感谢您的帮助
大家下午好。
我想知道如何在EXCEl中分析工作统计数据。
谁能告诉我什么可以通过DDE从mt4中提取,以及我在哪里可以得到所有允许的函数来转移到excel中?
将非常感谢您的帮助