Хотелось бы сделать некий массив в который помещать все пары по которым были отправлены сообщения, а потом проверять при попытке отправить письмо есть ли данная пара в массиве, если есть письмо не отправляется.
Алгоритм который Вы описали правильный. Что именно у Вас не получается ?
Алгоритм который Вы описали правильный. Что именно у Вас не получается ?
Общая мысль алгоритма правильная, только нужен ещё критерий исключения инструмента из массива.
Требуется ведь когда-то и разрешить отправку сообщения по паре, которая есть в массиве (а они там будут в конечном итоге все, если не исключать).
Так вот критерий исключения в описанном алгоритме отсутствует.
Общая мысль алгоритма правильная, только нужен ещё критерий исключения инструмента из массива.
Требуется ведь когда-то и разрешить отправку сообщения по паре, которая есть в массиве (а они там будут в конечном итоге все, если не исключать).
Так вот критерий исключения в описанном алгоритме отсутствует.
По поводу исключения - можно просто каждый день, или каждый 4 час очищать массив.
Алгоритм который Вы описали правильный. Что именно у Вас не получается ?
Сергей, дело в том, что запускаю один советник, который обрабатывает 20 валютных пар.
Так вот, ситуация к примеру есть игра по "паре 1" письмо ушло и записывается в переменную "пара 1". Далее игра по "паре 2", значение переменной "пара 1" меняется на "пара 2".
Далее советник продолжает работать, каждый тик и снова показывает игру по "паре 1", опять уходит письмо, далее снова игра по "паре 2" и снова письмо и т.д. ((((((((((((((((((((((
Что такое "игра" ?
Если торговая операция, то включите Пуш-уведомления в терминале на смартфон. Все проблемы решены.
Если имеется ввиду получение сигналов от индикаторов на разных инструментах - тогда ключевое слово "массив" (Вы его сами ведь назвали), а не одна переменная для хранения информации. Даже 2 массива. В одном строковом имена инструментов, в другом время бара на котором было отправлено последнее сообщение по соответствующему инструменту. Индексы совпадают соответственно. И если во втором массиве дата текущего бара, то уже не отправлять сообщение.
Вариантов очень много.
Что такое "игра" ?
Если торговая операция, то включите Пуш-уведомления в терминале на смартфон. Все проблемы решены.
Если имеется ввиду получение сигналов от индикаторов на разных инструментах - тогда ключевое слово "массив" (Вы его сами ведь назвали), а не одна переменная для хранения информации. Даже 2 массива. В одном строковом имена инструментов, в другом время бара на котором было отправлено последнее сообщение по соответствующему инструменту. Индексы совпадают соответственно. И если во втором массиве дата текущего бара, то уже не отправлять сообщение.
Вариантов очень много.
Андрей, я вот не знаю как, при переборе пар, при отправке письма, помещать в массив данные и как потом их прочитать из массива?
Разбирался так и не понял(
Андрей, я вот не знаю как, при переборе пар, при отправке письма, помещать в массив данные и как потом их прочитать из массива?
Разбирался так и не понял(
Накидал на скорую руку
struct checkSymbol { string symbol; datetime timeBar; }; bool checkMessage(const string symbol) { static checkSymbol ArrayMessage[]; int n = ArraySize(ArrayMessage); bool res = false, resSymbol = false; for(int i=0; i<n; i++) if( ArrayMessage[i].symbol == symbol ) { if( ArrayMessage[i].timeBar != Time[0] ) { ArrayMessage[i].timeBar = Time[0]; res = true; } resSymbol = true; break; } if(!resSymbol) if( ArrayResize(ArrayMessage, n+1) == n+1) { ArrayMessage[n].symbol = symbol; ArrayMessage[n].timeBar = Time[0]; res = true; } return res; }
Т.к. не знаю какую вы сохраняете информацию при отправке сообщения. Написал проверку времени открытия бара. Чтоб отправлялось не чаще чем 1 раз за бар.
Сергей, дело в том, что запускаю один советник, который обрабатывает 20 валютных пар.
Так вот, ситуация к примеру есть игра по "паре 1" письмо ушло и записывается в переменную "пара 1". Далее игра по "паре 2", значение переменной "пара 1" меняется на "пара 2".
Далее советник продолжает работать, каждый тик и снова показывает игру по "паре 1", опять уходит письмо, далее снова игра по "паре 2" и снова письмо и т.д. ((((((((((((((((((((((
Вот ещё вариант с массивом:
#property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict string arr_data[][2]; // массив в который записываем имя символа([i][0]) и время отправки([i][1]) сообщения int period_hour = 1; // пауза в часах на отправку сообщения по каждому символу //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(Ваше условие для отправки сообщения) { if(Array_Check("EURUSD", arr_data, period_hour)) { // сюда вставляем Ваш код(функцию) для отправки сообщения Array_Write("EURUSD", arr_data); } } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool Array_Check(string symbol, string &arr[][2], int period) { int s = ArrayRange(arr, 0); for(int i = 0; i < s; i++) { if(arr[i][0] == symbol) { if(StringToTime(arr[i][1]) + (period * 3600) < TimeCurrent()) { arr[i][0] = ""; arr[i][1] = ""; return(true); } else return(false); } } return(true); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Array_Write(string symbol, string &arr[][2]) { int s = ArrayRange(arr, 0); for(int i = 0; i < s; i++) { if(arr[i][0] == "" && arr[i][1] == "") { arr[i][0] = symbol; arr[i][1] = TimeToString(TimeCurrent()); return; } } ArrayResize(arr, s + 1); arr[s][0] = symbol; arr[s][1] = TimeToString(TimeCurrent()); } //+------------------------------------------------------------------+
Условие для отправки сообщения Вы не предоставили, пропишите его сами. Вместо "EURUSD" необходимо передать символ по которому отправляется письмо.
p.s. Да и желательно здесь:
if(Array_Check("EURUSD", arr_data, period_hour)) { // сюда вставляем Ваш код(функцию) для отправки сообщения Array_Write("EURUSD", arr_data); }делать проверку на успешность отправки сообщения, и если получили ошибку то выходить оператором return;
Вот ещё вариант с массивом:
Условие для отправки сообщения Вы не предоставили, пропишите его сами. Вместо "EURUSD" необходимо передать символ по которому отправляется письмо.
p.s. Да и желательно здесь:
делать проверку на успешность отправки сообщения, и если получили ошибку то выходить оператором return;Спасибо, огромное!
Все работает!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я написал функцию отправки писем советником при благоприятном условии торговли.
Работаю по 20 валютным парам, на разных таймфреймах.
Так вот иногда получается так, что советник ловит несколько/множество вариантов торговли и пытается отправить письмо.
Я со своей стороны сохраняю последнюю пару игры по которой отправлено письмо (не работает, потому как потом идет игра к примеру по другой паре и переменная меняется потом снова по предыдущей паре, короче в результате отправляется куча писем).
Хотелось бы сделать некий массив в который помещать все пары по которым были отправлены сообщения, а потом проверять при попытке отправить письмо есть ли данная пара в массиве, если есть письмо не отправляется.
Помоги пожалуйста с данным алгоритмом или посоветуйте как его реализовать?
Спасибо большое!