对OnBookEvent的订阅有时会脱落--有这种情况吗? - 页 9 1234567891011121314 新评论 prostotrader 2018.07.25 12:34 #81 有一个拐杖的解决方案。 使用TERMINAL的全局变量 来创建你自己的计数器。 只是你需要想一个独特的名字,以便同一符号的两个窗口创建自己的 全局终端变量。 添加 如果你不想打开两个符号窗口,你可以使用Magik作为全局终端变量的名称 你可以使用Magik //+------------------------------------------------------------------+ //| AutoMagic.mqh | //| Copyright 2017 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ //version "1.34 ulong symb_magic; //-------------------------------------------------------------------+ // Split string function | //+------------------------------------------------------------------+ string SplitString(const string a_str,ulong &a_month,ulong &a_year) { int str_size=StringLen(a_str); int str_tire=StringFind(a_str, "-"); int str_tochka=StringFind(a_str, ".", str_tire); if((str_tire>0) && (str_tochka>0) &&(str_size > 0)) { a_month= ulong(StringToInteger(StringSubstr(a_str,str_tire+1,str_tochka-str_tire-1))); a_year = ulong(StringToInteger(StringSubstr(a_str,str_tochka+1,str_size-str_tochka-1))); if((a_month > 0) && (a_year > 0)) return(StringSubstr(a_str, 0, str_tire)); } return(""); } //-------------------------------------------------------------------+ // Get Magic function | //+------------------------------------------------------------------+ ulong GetMagic(const string a_symbol) { if(StringLen(a_symbol)>10) { Print(__FUNCTION__, "Invalid magic string!"); return(0); } ulong month = 0; ulong year = 0; string new_str=SplitString(a_symbol,month,year); if(StringLen(new_str)>0) { uchar char_array[]; int result=StringToCharArray(new_str,char_array,0,WHOLE_ARRAY,CP_ACP); if(result>0) { ulong value; ulong cur_magic = 0; for(int i = 0; i < result - 1; i++) { value=ulong(char_array[i]); value<<=(40 -(i*8)); cur_magic+=value; } month<<=8; cur_magic += month; cur_magic += year; if(a_symbol == Symbol()) { symb_magic = cur_magic <<= 16; return(symb_magic); } else return(cur_magic <<= 16); } } return(0); } //-------------------------------------------------------------------+ // Is my magic function | //+------------------------------------------------------------------+ bool IsMyMagic(const ulong m_magic) { ulong in_magic=m_magic; ulong stored_magic=symb_magic; in_magic>>=16; stored_magic>>=16; if(stored_magic == in_magic) return(true); return(false); } //+------------------------------------------------------------------+或只是一个符号名称 如 "Si-9.18_bookcount"。 我是这样计算挂单的抵押品(GO)资金的 A100 2018.07.25 12:56 #82 prostotrader: 只是你需要想一个独特的名字,以便同一符号的两个窗口创建自己的全局终端变量。 你很难想到一个比这更好的名字https://www.mql5.com/ru/forum/267154/page8#comment_8171650。 Подписка на OnBookEvent иногда отваливается - есть такое? 2018.07.24www.mql5.com После того как поплотнее занялся стаканом и повесил на чарты несколько экспертов и индикаторов, подписанных на OnBookEvent, обнаружил, что некоторы... prostotrader 2018.07.25 12:58 #83 A100: 我几乎想不出比这更好的名字了https://www.mql5.com/ru/forum/267154/page8#comment_8171650很好,不管叫什么名字,只要在有多个窗口的情况下是唯一的就可以了。 添加 如果我有什么地方说错了,请纠正我。 //+------------------------------------------------------------------+ //| BookCount.mqh | //| Copyright 2018 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018 prostotrader" #property link "https://www.mql5.com" // //+------------------------------------------------------------------+ //| Create book count function | //+------------------------------------------------------------------+ string CreateBookCount(int &cnt) { string book_cnt_name = IntegerToString(ChartID()); if(GlobalVariableCheck(book_cnt_name) == true) { double curr_value; if(GlobalVariableGet(book_cnt_name, curr_value) == true) { cnt = int(curr_value); return(book_cnt_name); } } else { cnt = 0; if(ulong(GlobalVariableSet(book_cnt_name, double(cnt))) > 0) { return(book_cnt_name); } } return(""); } //+------------------------------------------------------------------+ //| Delete book count function | //+------------------------------------------------------------------+ bool DeleteBookCount(const string cnt_name) { if(GlobalVariableCheck(cnt_name) == true) { return(GlobalVariableDel(cnt_name)); } return(false); } //+------------------------------------------------------------------+ //| Book count update function | //+------------------------------------------------------------------+ bool BookCountUpdate(const string cnt_name, int &value, const bool is_update) { if(GlobalVariableCheck(cnt_name) == true) { double curr_value; double new_value; if(GlobalVariableGet(cnt_name, curr_value) == true) { if(is_update == true) { new_value = curr_value + 1; } else { new_value = curr_value - 1; } int i = 0; do { i++; if(GlobalVariableSetOnCondition(cnt_name, new_value, curr_value) == true) { value = int(new_value); return(true); } } while(i < 100); } } return(false); } A100 2018.07.25 16:24 #84 prostotrader: 如果我有什么地方弄错了,请纠正。名称的唯一性与符号的名称直接相关,我指的是更普遍的情况 IntegerToString(ChartID()) + ":" + symbol 也就是说,在你的情况下(如果图表上的所有MQL程序只与当前的符号一起工作)。 IntegerToString(ChartID()) + ":" + Symbol() 而不是 IntegerToString(ChartID()) 这不是一个错误...只是纪律 prostotrader 2018.07.25 16:43 #85 伙计们! 我们永远不会 "打败 "MT-5! 指标1 //+------------------------------------------------------------------+ //| Test_ind_1.mq5 | //| Copyright 2018 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018 prostotrader" #property link "https://www.mql5.com" #property version "1.00" #include "..\Include\BookCount.mqh" #define on_call -111 #property indicator_separate_window string b_cnt_name; int book_count; bool is_book; double Buff[]; int event_cnt =0; #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Test_1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrAqua #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { b_cnt_name = CreateBookCount(book_count); if(b_cnt_name == "") return(INIT_FAILED); //--- Set buffers IndicatorSetInteger(INDICATOR_DIGITS,0); IndicatorSetString(INDICATOR_SHORTNAME,"Test_ind_1"); //---Set buffers SetIndexBuffer(0,Buff,INDICATOR_DATA); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); ArraySetAsSeries(Buff,true); is_book = MarketBookAdd(Symbol()); if(is_book == true) { Print(__FUNCTION__, ": Подписка на стакан добавлена. Символ ", Symbol()); if(BookCountUpdate(b_cnt_name, book_count, true) == true) { Print(__FUNCTION__, ": Счётчик подписок обновлён. Символ ", Symbol()); Print(__FUNCTION__, ": Book count: ", book_count); } } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Print(__FUNCTION__, ": Book count: ", book_count); if(book_count > 1) { if(BookCountUpdate(b_cnt_name, book_count, false) == true) { Print(__FUNCTION__, ": Счётчик подписок обновлён. Символ ", Symbol()); Print(__FUNCTION__, ": Book count: ", book_count); } } else { Print(__FUNCTION__, ": Book count: ", book_count); MarketBookRelease(Symbol()); Print(__FUNCTION__, ": Подписка на стакан удалена. Символ ", Symbol()); DeleteBookCount(b_cnt_name); Print(__FUNCTION__, ": Счётчик подписок удален. Символ ", Symbol()); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { if(prev_calculated == 0) { ArrayInitialize(Buff, EMPTY_VALUE); } Buff[0] = 2; //--- return value of prev_calculated for next call event_cnt = rates_total; return(rates_total); } //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent(const string &symbol) { if(symbol == Symbol()) { // Print(__FUNCTION__, ": Подписка работает. Символ ", Symbol()); double price[]; OnCalculate(event_cnt,event_cnt,on_call,price); } } //+------------------------------------------------------------------+ 指标2 //+------------------------------------------------------------------+ //| Test_ind_2.mq5 | //| Copyright 2018 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018 prostotrader" #property link "https://www.mql5.com" #property version "1.00" #include "..\Include\BookCount.mqh" #define on_call -111 #property indicator_separate_window string b_cnt_name; int book_count; bool is_book; double Buff[]; int event_cnt =0; #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Test_1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrLime #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { b_cnt_name = CreateBookCount(book_count); if(b_cnt_name == "") return(INIT_FAILED); //--- Set buffers IndicatorSetInteger(INDICATOR_DIGITS,0); IndicatorSetString(INDICATOR_SHORTNAME,"Test_ind_2"); //---Set buffers SetIndexBuffer(0,Buff,INDICATOR_DATA); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); ArraySetAsSeries(Buff,true); is_book = MarketBookAdd(Symbol()); if(is_book == true) { Print(__FUNCTION__, ": Подписка 2 на стакан добавлена. Символ ", Symbol()); if(BookCountUpdate(b_cnt_name, book_count, true) == true) { Print(__FUNCTION__, ": Счётчик подписок обновлён. Символ ", Symbol()); Print(__FUNCTION__, ": Book count: ", book_count); } } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Print(__FUNCTION__, ": Book count: ", book_count); if(book_count > 1) { if(BookCountUpdate(b_cnt_name, book_count, false) == true) { Print(__FUNCTION__, ": 2 Счётчик подписок обновлён. Символ ", Symbol()); Print(__FUNCTION__, ": 2 Book count: ", book_count); } } else { MarketBookRelease(Symbol()); Print(__FUNCTION__, ": Подписка 2 на стакан удалена. Символ ", Symbol()); DeleteBookCount(b_cnt_name); Print(__FUNCTION__, ": Счётчик подписок удален. Символ ", Symbol()); Print(__FUNCTION__, ": Book count: ", book_count); } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { if(prev_calculated == 0) { ArrayInitialize(Buff, EMPTY_VALUE); } Buff[0] = 2; //--- return value of prev_calculated for next call event_cnt = rates_total; return(rates_total); } //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent(const string &symbol) { if(symbol == Symbol()) { // Print(__FUNCTION__, ": Подписка 2 работает. Символ ", Symbol()); double price[]; OnCalculate(event_cnt,event_cnt,on_call,price); } } //+------------------------------------------------------------------+ 全局变量 结果1 2018.07.25 19:34:43.733 Test_ind_1 (Si-9.18,M1) OnInit: Подписка на стакан добавлена. Символ Si-9.18 2018.07.25 19:34:43.733 Test_ind_1 (Si-9.18,M1) OnInit: Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 19:34:43.733 Test_ind_1 (Si-9.18,M1) OnInit: Book count: 1 2018.07.25 19:34:49.980 Test_ind_2 (Si-9.18,M1) OnInit: Подписка 2 на стакан добавлена. Символ Si-9.18 2018.07.25 19:34:49.980 Test_ind_2 (Si-9.18,M1) OnInit: Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 19:34:49.980 Test_ind_2 (Si-9.18,M1) OnInit: Book count: 2 2018.07.25 19:35:06.149 Test_ind_2 (Si-9.18,M1) OnDeinit: Book count: 2 2018.07.25 19:35:06.149 Test_ind_2 (Si-9.18,M1) OnDeinit: 2 Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 19:35:06.149 Test_ind_2 (Si-9.18,M1) OnDeinit: 2 Book count: 1 2018.07.25 19:35:17.408 Test_ind_1 (Si-9.18,M1) OnDeinit: Book count: 1 2018.07.25 19:35:17.408 Test_ind_1 (Si-9.18,M1) OnDeinit: Book count: 1 2018.07.25 19:35:17.408 Test_ind_1 (Si-9.18,M1) OnDeinit: Подписка на стакан удалена. Символ Si-9.18 2018.07.25 19:35:17.408 Test_ind_1 (Si-9.18,M1) OnDeinit: Счётчик подписок удален. Символ Si-9.18 结果2 2018.07.25 19:42:34.884 Test_ind_1 (Si-9.18,M1) OnInit: Подписка на стакан добавлена. Символ Si-9.18 2018.07.25 19:42:34.884 Test_ind_1 (Si-9.18,M1) OnInit: Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 19:42:34.884 Test_ind_1 (Si-9.18,M1) OnInit: Book count: 1 2018.07.25 19:42:41.019 Test_ind_2 (Si-9.18,M1) OnInit: Подписка 2 на стакан добавлена. Символ Si-9.18 2018.07.25 19:42:41.019 Test_ind_2 (Si-9.18,M1) OnInit: Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 19:42:41.019 Test_ind_2 (Si-9.18,M1) OnInit: Book count: 2 2018.07.25 19:42:46.310 Test_ind_1 (Si-9.18,M1) OnDeinit: Book count: 1 2018.07.25 19:42:46.310 Test_ind_1 (Si-9.18,M1) OnDeinit: Book count: 1 2018.07.25 19:42:46.311 Test_ind_1 (Si-9.18,M1) OnDeinit: Подписка на стакан удалена. Символ Si-9.18 2018.07.25 19:42:46.311 Test_ind_1 (Si-9.18,M1) OnDeinit: Счётчик подписок удален. Символ Si-9.18 2018.07.25 19:42:57.445 Test_ind_2 (Si-9.18,M1) OnDeinit: Book count: 2 如果你先放1个指标,再放第二个指标,那么 当你删除第一个指标时--完全是垃圾(结果2),但 如果你把第一个指标放在前面,然后是第二个指标,然后是 移除第2个,然后是第1个,一切都很好(结果1)! 添加 看来,如果添加了2个指标,那么在删除指标时,该 被放在第一位。 void OnDeinit(const int reason)被调用的次数与图表上的指标数量一样多! A100 2018.07.25 17:01 #86 prostotrader:伙计们! 我们将永远不会 "打败 "MT-5! 一般来说,在处理全局变量 时,会有一些陷阱...代码中可能有一个错误...我现在在手机上--也许有人能从我的电脑上检查一下--帮帮我。 prostotrader 2018.07.25 17:17 #87 我想我明白了!每个指标都有一个变量,在你删除一个指标之前,需要对其进行更新。:) 我会解决这个问题。 prostotrader 2018.07.25 17:28 #88 是的,我的错误。它在正常工作。 2018.07.25 20:25:20.924 Test_ind_1 (Si-9.18,M1) OnInit: Indicator1 - Подписка на стакан добавлена. Символ Si-9.18 2018.07.25 20:25:20.924 Test_ind_1 (Si-9.18,M1) OnInit: Indicator1 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:25:20.924 Test_ind_1 (Si-9.18,M1) OnInit: Indicator1 - Book count: 1 2018.07.25 20:25:25.325 Test_ind_2 (Si-9.18,M1) OnInit: Indicator 2 - Подписка на стакан добавлена. Символ Si-9.18 2018.07.25 20:25:25.325 Test_ind_2 (Si-9.18,M1) OnInit: Indicator 2 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:25:25.325 Test_ind_2 (Si-9.18,M1) OnInit: Indicator 2 - Book count: 2 2018.07.25 20:25:29.813 Test_ind_3 (Si-9.18,M1) OnInit: Indicator 3 - Подписка на стакан добавлена. Символ Si-9.18 2018.07.25 20:25:29.813 Test_ind_3 (Si-9.18,M1) OnInit: Indicator 3 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:25:29.813 Test_ind_3 (Si-9.18,M1) OnInit: Indicator 3 - Book count: 3 2018.07.25 20:25:38.919 Test_ind_1 (Si-9.18,M1) OnDeinit: Indicator1 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:25:38.919 Test_ind_1 (Si-9.18,M1) OnDeinit: Indicator1 - Book count: 2 2018.07.25 20:25:53.097 Test_ind_3 (Si-9.18,M1) OnDeinit: Indicator 3 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:25:53.097 Test_ind_3 (Si-9.18,M1) OnDeinit: Indicator 3 - Book count: 1 2018.07.25 20:25:58.296 Test_ind_2 (Si-9.18,M1) OnDeinit: Indicator 2 - Подписка на стакан удалена. Символ Si-9.18 2018.07.25 20:25:58.296 Test_ind_2 (Si-9.18,M1) OnDeinit: Indicator 2 - Счётчик подписок удален. Символ Si-9.18 附属文件 //+------------------------------------------------------------------+ //| BookCount.mqh | //| Copyright 2018 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018 prostotrader" #property link "https://www.mql5.com" // //+------------------------------------------------------------------+ //| Ctrate book count function | //+------------------------------------------------------------------+ string CreateBookCount(int &cnt) //return book count name & count value { string book_cnt_name=IntegerToString(ChartID()); if(GlobalVariableCheck(book_cnt_name)==true) { double curr_value; if(GlobalVariableGet(book_cnt_name,curr_value)==true) { cnt=int(curr_value); return(book_cnt_name); } } else { cnt=0; if(ulong(GlobalVariableSet(book_cnt_name,double(cnt)))>0) { return(book_cnt_name); } } return(""); } //+------------------------------------------------------------------+ //| Delete book count function | //+------------------------------------------------------------------+ bool DeleteBookCount(const string cnt_name) //delete g;obal variable book count { if(GlobalVariableCheck(cnt_name)==true) { return(GlobalVariableDel(cnt_name)); } return(false); } //+------------------------------------------------------------------+ //| Book count update function | //+------------------------------------------------------------------+ bool BookCountUpdate(const string cnt_name,int &value,const bool is_update) //Update book count global variable { if(GlobalVariableCheck(cnt_name)==true) { double curr_value; double new_value; if(GlobalVariableGet(cnt_name,curr_value)==true) { if(is_update==true) { new_value=curr_value+1; } else { new_value=curr_value-1; } int i=0; do { i++; if(GlobalVariableSetOnCondition(cnt_name,new_value,curr_value)==true) { value=int(new_value); return(true); } } while(i<100); } } return(false); } //+------------------------------------------------------------------+ //| Get book count function | //+------------------------------------------------------------------+ bool GetBookCount(const string cnt_name, int &cnt) { if(GlobalVariableCheck(cnt_name)==true) { double curr_value; if(GlobalVariableGet(cnt_name,curr_value)==true) { cnt=int(curr_value); return(true); } } return(false); } //+------------------------------------------------------------------+ 指标 //+------------------------------------------------------------------+ //| Test_ind_1.mq5 | //| Copyright 2018 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018 prostotrader" #property link "https://www.mql5.com" #property version "1.00" #include "..\Include\BookCount.mqh" #define on_call -111 #property indicator_separate_window string b_cnt_name; int book_count; bool is_book; double Buff[]; int event_cnt =0; #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Test_1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrAqua #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { b_cnt_name = CreateBookCount(book_count); if(b_cnt_name == "") return(INIT_FAILED); //--- Set buffers IndicatorSetInteger(INDICATOR_DIGITS,0); IndicatorSetString(INDICATOR_SHORTNAME,"Test_ind_1"); //---Set buffers SetIndexBuffer(0,Buff,INDICATOR_DATA); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); ArraySetAsSeries(Buff,true); is_book = MarketBookAdd(Symbol()); if(is_book == true) { Print(__FUNCTION__, ": Indicator1 - Подписка на стакан добавлена. Символ ", Symbol()); if(BookCountUpdate(b_cnt_name, book_count, true) == true) { Print(__FUNCTION__, ": Indicator1 - Счётчик подписок обновлён. Символ ", Symbol()); Print(__FUNCTION__, ": Indicator1 - Book count: ", book_count); } } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { if(GetBookCount(b_cnt_name, book_count) == true) { if(book_count > 1) { if(BookCountUpdate(b_cnt_name, book_count, false) == true) { Print(__FUNCTION__, ": Indicator1 - Счётчик подписок обновлён. Символ ", Symbol()); Print(__FUNCTION__, ": Indicator1 - Book count: ", book_count); } } else { MarketBookRelease(Symbol()); Print(__FUNCTION__, ": Indicator1 - Подписка на стакан удалена. Символ ", Symbol()); if(DeleteBookCount(b_cnt_name) == true) { Print(__FUNCTION__, ": Indicator1 - Счётчик подписок удален. Символ ", Symbol()); } } } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { if(prev_calculated == 0) { ArrayInitialize(Buff, EMPTY_VALUE); } Buff[0] = 2; //--- return value of prev_calculated for next call event_cnt = rates_total; return(rates_total); } //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent(const string &symbol) { if(symbol == Symbol()) { // Print(__FUNCTION__, ": Подписка работает. Символ ", Symbol()); double price[]; OnCalculate(event_cnt,event_cnt,on_call,price); } } //+------------------------------------------------------------------+ 它的工作正常了! prostotrader 2018.07.25 17:44 #89 2018.07.25 20:42:35.261 Test_ind_1 (Si-9.18,M1) OnInit: Indicator 1 - Подписка на стакан добавлена. Символ Si-9.18 2018.07.25 20:42:35.261 Test_ind_1 (Si-9.18,M1) OnInit: Indicator 1 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:42:35.261 Test_ind_1 (Si-9.18,M1) OnInit: Indicator 1 - Book count: 1 2018.07.25 20:42:35.407 Test_ind_1 (Si-9.18,M1) OnBookEvent: Indicator 1 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:37.935 Test_ind_1 (Si-9.18,M1) OnBookEvent: Indicator 1 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:38.909 Test_ind_2 (Si-9.18,M1) OnInit: Indicator 2 - Подписка на стакан добавлена. Символ Si-9.18 2018.07.25 20:42:38.909 Test_ind_2 (Si-9.18,M1) OnInit: Indicator 2 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:42:38.909 Test_ind_2 (Si-9.18,M1) OnInit: Indicator 2 - Book count: 2 2018.07.25 20:42:39.053 Test_ind_1 (Si-9.18,M1) OnBookEvent: Indicator 1 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:39.053 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:39.195 Test_ind_1 (Si-9.18,M1) OnBookEvent: Indicator 1 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:43.127 Test_ind_3 (Si-9.18,M1) OnInit: Indicator 3 - Подписка на стакан добавлена. Символ Si-9.18 2018.07.25 20:42:43.127 Test_ind_3 (Si-9.18,M1) OnInit: Indicator 3 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:42:43.127 Test_ind_3 (Si-9.18,M1) OnInit: Indicator 3 - Book count: 3 2018.07.25 20:42:43.677 Test_ind_1 (Si-9.18,M1) OnBookEvent: Indicator 1 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:43.677 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:43.677 Test_ind_3 (Si-9.18,M1) OnBookEvent: Indicator 3 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:44.066 Test_ind_1 (Si-9.18,M1) OnBookEvent: Indicator 1 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:44.066 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:44.066 Test_ind_3 (Si-9.18,M1) OnBookEvent: Indicator 3 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:52.281 Test_ind_1 (Si-9.18,M1) OnDeinit: Indicator 1 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:42:52.281 Test_ind_1 (Si-9.18,M1) OnDeinit: Indicator 1 - Book count: 2 2018.07.25 20:42:52.533 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:52.533 Test_ind_3 (Si-9.18,M1) OnBookEvent: Indicator 3 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:52.579 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:52.579 Test_ind_3 (Si-9.18,M1) OnBookEvent: Indicator 3 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:52.779 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:52.779 Test_ind_3 (Si-9.18,M1) OnBookEvent: Indicator 3 - Подписка работает. Символ Si-9.18 2018.07.25 20:42:59.417 Test_ind_3 (Si-9.18,M1) OnDeinit: Indicator 3 - Счётчик подписок обновлён. Символ Si-9.18 2018.07.25 20:42:59.417 Test_ind_3 (Si-9.18,M1) OnDeinit: Indicator 3 - Book count: 1 2018.07.25 20:42:59.946 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:43:00.786 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:43:07.775 Test_ind_2 (Si-9.18,M1) OnBookEvent: Indicator 2 - Подписка работает. Символ Si-9.18 2018.07.25 20:43:07.977 Test_ind_2 (Si-9.18,M1) OnDeinit: Indicator 2 - Подписка на стакан удалена. Символ Si-9.18 2018.07.25 20:43:07.977 Test_ind_2 (Si-9.18,M1) OnDeinit: Indicator 2 - Счётчик подписок удален. Символ Si-9.18 把握机会。 Stanislav Korotky 2018.07.25 18:20 #90 prostotrader: 利用好它。在软件来自不同供应商且没有共同控制的一般情况下,这并没有帮助。因此,所有这些手鼓舞最初是没有用的。而这一点以前已经说过了。你把这个话题弄得乱七八糟,离题万里。 1234567891011121314 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有一个拐杖的解决方案。
使用TERMINAL的全局变量 来创建你自己的计数器。
只是你需要想一个独特的名字,以便同一符号的两个窗口创建自己的
全局终端变量。
添加
如果你不想打开两个符号窗口,你可以使用Magik作为全局终端变量的名称
你可以使用Magik
或只是一个符号名称
如 "Si-9.18_bookcount"。
我是这样计算挂单的抵押品(GO)资金的
只是你需要想一个独特的名字,以便同一符号的两个窗口创建自己的全局终端变量。
我几乎想不出比这更好的名字了https://www.mql5.com/ru/forum/267154/page8#comment_8171650
很好,不管叫什么名字,只要在有多个窗口的情况下是唯一的就可以了。
添加
如果我有什么地方说错了,请纠正我。
如果我有什么地方弄错了,请纠正。
名称的唯一性与符号的名称直接相关,我指的是更普遍的情况
也就是说,在你的情况下(如果图表上的所有MQL程序只与当前的符号一起工作)。
而不是
这不是一个错误...只是纪律伙计们!
我们永远不会 "打败 "MT-5!
指标1
指标2
全局变量
结果1
结果2
如果你先放1个指标,再放第二个指标,那么
当你删除第一个指标时--完全是垃圾(结果2),但
如果你把第一个指标放在前面,然后是第二个指标,然后是
移除第2个,然后是第1个,一切都很好(结果1)!
添加
看来,如果添加了2个指标,那么在删除指标时,该
被放在第一位。
void OnDeinit(const int reason)被调用的次数与图表上的指标数量一样多!
伙计们!
我们将永远不会 "打败 "MT-5!
一般来说,在处理全局变量 时,会有一些陷阱...代码中可能有一个错误...我现在在手机上--也许有人能从我的电脑上检查一下--帮帮我。
我想我明白了!每个指标都有一个变量,在你删除一个指标之前,需要对其进行更新。:)
我会解决这个问题。
是的,我的错误。它在正常工作。
附属文件
指标
它的工作正常了!
利用好它。
在软件来自不同供应商且没有共同控制的一般情况下,这并没有帮助。因此,所有这些手鼓舞最初是没有用的。而这一点以前已经说过了。你把这个话题弄得乱七八糟,离题万里。