Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1286

 
MakarFX:

Скажите, пожалуйста, такой выбор шрифта возможно сделать в индикаторе?


Почему нет? Делайте свой enum и все проблемы………

 
Alexey Viktorov:

Почему нет? Делайте свой enum и все проблемы………

Это понятно, а как запросить список установленных шрифтов?

 
Nikolai Semko:

Ну Вы юморист.

Я перед кем тут распинался?


Что-то я пропустил. Спасибо. То, что надо!

 
ANDREY:

Понял. Спасибо за помощь.

Я то же так сразу подумал, что советнику трудно открывать так много ордеров. Я пытался ограничить количество ордеров вот этим кодом

То есть открывать открывать ордер только в 10:00. Но результат - прежний.

2020.10.27 10:25:17.548 Core 1 272 Mb memory used including 36 Mb of history data, 64 Mb of tick data



Не знаю МКЛ5 досконально, если честно. Но логика хромает. Вам нужно один ордер открыть же. Это достигается присвоением переменной часа вначале функции на тике и в конце вы присваиваете в другую переменную. В середине если не равны переменные, то открываем ордер. Пример выше с минутками такой же.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //
int tm; 
//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10 && tm != time_now.hour) //на первом тике, когда time_now.hour станет 10 а tm еще 9
                                           // и на следующем тике tm будет равно 10


   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }  

tm= time_now.hour;
     return;
  }



 
MakarFX:

Это понятно, а как запросить список установленных шрифтов?

Думаю в Вашем примере это самодельный список. Без запроса к винде.

 
Valeriy Yastremskiy:

Не знаю МКЛ5 досконально, если честно. Но логика хромает. Вам нужно один ордер открыть же. Это достигается присвоением переменной часа вначале функции на тике и в конце вы присваиваете в другую переменную. В середине если не равны переменные, то открываем ордер. Пример выше с минутками такой же.

вот поэтому и рекомендуют стараться делать работу ЕА исключительно со своими магиками

если задача открывать один раз в сутки ордер в определенное время, то алгоритм такой:

- запустили ЕА, он проверяет количество открытых ордеров, если ордер с нашим магиком открыт, то выход до следующего тика

- если нет ордеров, ЕА ждет пока текущий час и минуты будут больше заданных

- наступило это время, ЕА, проверяет историю ордеров и если ха последние сутки не выставлялся ордер с нашим магиком, то выставим ордер и выйдем - выход полезен, чтобы не обрабатывать ошибки сервера, если ордер не будет выставлен, то на следующем тике попытаемся еще раз это сделать, т.е. не нужно организовывать цикл для повторных открытий ордера на этом тике.... но это дело вкуса и задач, да и самая простая реализация )))

 
Igor Makanu:

вот поэтому и рекомендуют стараться делать работу ЕА исключительно со своими магиками

если задача открывать один раз в сутки ордер в определенное время, то алгоритм такой:

- запустили ЕА, он проверяет количество открытых ордеров, если ордер с нашим магиком открыт, то выход до следующего тика

- если нет ордеров, ЕА ждет пока текущий час и минуты будут больше заданных

- наступило это время, ЕА, проверяет историю ордеров и если ха последние сутки не выставлялся ордер с нашим магиком, то выставим ордер и выйдем - выход полезен, чтобы не обрабатывать ошибки сервера, если ордер не будет выставлен, то на следующем тике попытаемся еще раз это сделать, т.е. не нужно организовывать цикл для повторных открытий ордера на этом тике.... но это дело вкуса и задач, да и самая простая реализация )))

Там до магика еще пока не доросли. Конечно. В 5 ке дилемма конечно, в цикле с анализом ошибок или потиково пытаться открыть позицию. В случае долгих ответов может и проще на тике. 

 
Valeriy Yastremskiy:

Не знаю МКЛ5 досконально, если честно. Но логика хромает. Вам нужно один ордер открыть же. Это достигается присвоением переменной часа вначале функции на тике и в конце вы присваиваете в другую переменную. В середине если не равны переменные, то открываем ордер. Пример выше с минутками такой же.



Спасибо Вам большое. Знаний, которые Вы мне дали, мне как и не хватало. Я пытался сделать то же самое но по аналогии с четверкой. Оказывается , аналогия в данном случае неуместна.
Спасибо Вам еще раз.

 
Igor Makanu:

вот поэтому и рекомендуют стараться делать работу ЕА исключительно со своими магиками

если задача открывать один раз в сутки ордер в определенное время, то алгоритм такой:

- запустили ЕА, он проверяет количество открытых ордеров, если ордер с нашим магиком открыт, то выход до следующего тика

- если нет ордеров, ЕА ждет пока текущий час и минуты будут больше заданных

- наступило это время, ЕА, проверяет историю ордеров и если ха последние сутки не выставлялся ордер с нашим магиком, то выставим ордер и выйдем - выход полезен, чтобы не обрабатывать ошибки сервера, если ордер не будет выставлен, то на следующем тике попытаемся еще раз это сделать, т.е. не нужно организовывать цикл для повторных открытий ордера на этом тике.... но это дело вкуса и задач, да и самая простая реализация )))

Спасибо за ценную информацию. Благодаря Вам мое понимание mql 5 расширилось и углубилось.
Буду Вам очень признателен , если продемонстрируете на примере моего кода Ваш ход мысли. Это позволит мне усвоить сказанное Вами быстро и точно.
Еще раз большое спасибо.

Вот мой код, в котором я неправильно написал условие согласно которому ордер должен открываться только в 10:00

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
//Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
   MqlDateTime time_now;     // Будет использоваться для
   
 TimeCurrent(time_now);  
 if(!SymbolInfoTick(_Symbol,latest_price))
 if(time_now.hour==10&&time_now.min==0)
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_RETURN;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }
 
ANDREY:

Вот мой код, в котором я неправильно написал условие согласно которому ордер должен открываться только в 10:00

я не пишу на чистом MQL5, выставить ордер можно используя СБ класс CTrade

поиском  CTrade есть статьи по использованию СБ