OnBookEventのサブスクリプションが落ちることがあるのですが、そのようなことはあるのでしょうか? - ページ 9 1234567891011121314 新しいコメント prostotrader 2018.07.25 12:34 #81 松葉杖の解決策は1つです。 TERMINALのグローバル変 数を使用して、独自のカウンターを作成します。 ただ、同じシンボルの2つのウィンドウがそれぞれ独自の グローバルターミナル変数。 追加 シンボルウィンドウを2つ開きたくない場合は、グローバルターミナル変数の名前として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: ただ、同じシンボルの2つのウィンドウが独自のグローバルターミナル変数を作成するように、ユニークな名前を考える必要があります。 これ以上のネーミングはないでしょう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のインジケーターを置いたら 1番目のインジケーターを削除すると、全くゴミのような結果になります(結果2)、しかし もし、1stインジケータを最初に、2ndインジケータを次に、その後に 2番目を削除し、1番目を削除すると、すべてがうまくいきます(結果1)! 追加 2つのインジケータを追加した場合、そのインジケータを削除する際に が1位となった。 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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
松葉杖の解決策は1つです。
TERMINALのグローバル変 数を使用して、独自のカウンターを作成します。
ただ、同じシンボルの2つのウィンドウがそれぞれ独自の
グローバルターミナル変数。
追加
シンボルウィンドウを2つ開きたくない場合は、グローバルターミナル変数の名前としてMagikを使用することができます
Magikを使用することができます。
または単なるシンボル名
Si-9.18_bookcount "のようなものです。
私は、保留中の注文の担保(GO)資金をこのようにカウントしています。
ただ、同じシンボルの2つのウィンドウが独自のグローバルターミナル変数を作成するように、ユニークな名前を考える必要があります。
これ以上のネーミングはなかなかないですねhttps://www.mql5.com/ru/forum/267154/page8#comment_8171650
複数のウィンドウがある場合、ユニークな名前であれば、どんな名前でもかまいません。
追加
どこか間違っていたら訂正してください。
どこかを間違えていたら訂正してください
名前の一意性はシンボルの名前に直接関係するもので、より一般的な場合のことを言ったのです
すなわち、あなたの場合(チャート上のすべてのMQLプログラムが現在のシンボルに対してのみ動作する場合)。
代わりに
それは間違いではない...せいじょうきそくみんな!
MT-5には絶対に勝てない。
指標1
指標2
グローバル変数
結果 1
結果2
1のインジケーターを置いてから、2のインジケーターを置いたら
1番目のインジケーターを削除すると、全くゴミのような結果になります(結果2)、しかし
もし、1stインジケータを最初に、2ndインジケータを次に、その後に
2番目を削除し、1番目を削除すると、すべてがうまくいきます(結果1)!
追加
2つのインジケータを追加した場合、そのインジケータを削除する際に
が1位となった。
void OnDeinit(const int reason)は、チャート上のインジケーターの数だけ呼ばれます!
みんな!
MT-5には絶対勝てない!
一般に、グローバル変数を 扱う際には落とし穴がある...。コードに間違いがあるのでは...?今、携帯電話からなのですが、誰かパソコンから確認できるかもしれません。
わかったぞ! すべてのインジケータは、インジケータを削除する前に更新する必要がある変数を持っているんだ!」。:)
直します。
はい、私のミスです。正常に動作しています。
添付ファイル
インジケーター
ちゃんと動いてる!?
それを利用する。
これは、ソフトウェアが異なるベンダーのもので、共通する制御がない一般的なケースでは役に立ちません。だから、このタンバリンダンスも最初は無駄なんです。そして、これはすでに以前から言われていることです。スレッドをオフトピックで乱雑にしています。