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

 
ifitstrue:

Вопрос по

Какой будет индекс начального бара М1, если нужно нарисовать трендовую на прошедшем Н1?

И по времени начала и конца линии не понятно как найти.

Извиняйте, если не понятно объясняю.

Сложно для меня.

Кроме индексов есть ещё и время...

 
//---
   for(int j=0;j<OrdersTotal();j++)
     {
      if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICZZ || OrderSymbol()!=Symbol()) continue;
   //--- check order type 
      if(OrderType()==OP_BUY)
        {
         //if(OrderProfit()>0.0)
           //{//Print("OrderProfitB()=",OrderProfit());
         if(iClose(NULL,PERIOD_CURRENT,1)-iOpen(NULL,PERIOD_CURRENT,1)>0.0)
           {if(iOpen(NULL,PERIOD_CURRENT,0)-iClose(NULL,PERIOD_CURRENT,0)>0.0)
              {Print("iCloseB()=",iClose(NULL,PERIOD_CURRENT,0));
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
                  Print("OrderClose error ",GetLastError());
              }  
           }
        }
      if(OrderType()==OP_SELL)
        {
         //if(OrderProfit()>0.0)
           //{//Print("OrderProfitS()=",OrderProfit());
         if(iOpen(NULL,PERIOD_CURRENT,1)-iClose(NULL,PERIOD_CURRENT,1)>0.0)
           {if(iClose(NULL,PERIOD_CURRENT,0)-iOpen(NULL,PERIOD_CURRENT,0)>0.0)
              {Print("iCloseS()=",iClose(NULL,PERIOD_CURRENT,0));
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
                  Print("OrderClose error ",GetLastError());
              }
           }
Здравствуйте! 2021.03.01_19:49 GMT+3. Хотел улучшить результаты своей торговой системы. Но, похоже, функции iOpen() и iClose() не работают. В тестере стратегий проверял советник среди 175 сделок только 81-ая, вроде, закрывается по условиям, которые описаны в коде выше. Не работает этот код. Что можно сделать, чтобы он работал? Может обратиться к программистам MetaQuotes ? Сейчас посмотрю журналы тестера стратегий и выложу как редко срабатывают эти функции. ... Нашёл. 20210228.log . Время 13:53:02.192, open #155, iCloseB()=1.3434. Прилагаю файл журнала. Теперь, надеюсь, кто-нибудь мне ответит что делать с этими функциями iClose() и iOpen(), чтобы они работали. А то торговая система недостаточно эффективная. Пока всё. 2021.03.01_20:12 GMT+3.    
Файлы:
20210228.log  277 kb
 
Бывает такое на мт5, что на определенном таймфрейме уже пришло время появиться новому бару (и котировки вроде как идут), а его все нет и нет. Что это? Специфика ценообразования?
 
ifitstrue:

Вопрос по

Какой будет индекс начального бара М1, если нужно нарисовать трендовую на прошедшем Н1?

И по времени начала и конца линии не понятно как найти.

Извиняйте, если не понятно объясняю.

Сложно для меня.

У Н1 есть время открытия бара - это iTime()

Для понимания индекса бара с этим временем на М1 есть iBarShift()

Осталось узнать минимальный и максимальный бары на М1 при помощи iHighest() и iLowest()

 
Здравствуйте ещё раз! 2021.03.01_20:24 GMT+3. Я писал в этой ветке форума на странице 1304 что у меня тестер стратегий четвёртой версии медленно работает. И Виталий Музиченко меня неправильно понял. Я пишу время когда я закончил писать комментарий. И никого не тороплю. Хотя ответов на мой вопрос не было, но ответ у меня нашёлся случайно. Что я сейчас делаю с тестером стратегий? Перед тем, как тестировать советник я ставлю галочку "оптимизация". Оптимизирую. Хотя оптимизация пока мне не нужна. Оптимизация проходит примерно за одну секунду. Потом убираю галочку "оптимизация". И тогда уже проверяю как работает советник. Тогда тестер стратегий работает быстро. А не сорок минут или час. Считал своим долгом это написать. Может кому пригодится. А советник пишу в четвёртой версии терминала потому что у моего брокера в 4 версии терминала есть рублёвые счета, а в 5 версии нет. Не хочется связываться с US долларом: у него огромный потолок госдолга и мой брокер переводит мои доллары в мои рубли по нерыночному курсу. пока всё. 20:39 GMT+3.
 
Николай Никитюк:
Здравствуйте! 2021.03.01_19:49 GMT+3. Хотел улучшить результаты своей торговой системы. Но, похоже, функции iOpen() и iClose() не работают. В тестере стратегий проверял советник среди 175 сделок только 81-ая, вроде, закрывается по условиям, которые описаны в коде выше. Не работает этот код. Что можно сделать, чтобы он работал? Может обратиться к программистам MetaQuotes ? Сейчас посмотрю журналы тестера стратегий и выложу как редко срабатывают эти функции. ... Нашёл. 20210228.log . Время 13:53:02.192, open #155, iCloseB()=1.3434. Прилагаю файл журнала. Теперь, надеюсь, кто-нибудь мне ответит что делать с этими функциями iClose() и iOpen(), чтобы они работали. А то торговая система недостаточно эффективная. Пока всё. 2021.03.01_20:12 GMT+3.    

С кодом вроде все нормально, но меня смущает проскальзывание...очень маленькое, поставь больше slippage и проверь

 
Alexey Viktorov:
Боже милостивый! Разве я что-то хотел? Разве я что-то просил? Вы меня за кого держите?
Ошибся, сорри. не тому и не туда. )
 
Николай Никитюк:
Здравствуйте! 2021.03.01_19:49 GMT+3. Хотел улучшить результаты своей торговой системы. Но, похоже, функции iOpen() и iClose() не работают. В тестере стратегий проверял советник среди 175 сделок только 81-ая, вроде, закрывается по условиям, которые описаны в коде выше. Не работает этот код. Что можно сделать, чтобы он работал? Может обратиться к программистам MetaQuotes ? Сейчас посмотрю журналы тестера стратегий и выложу как редко срабатывают эти функции. ... Нашёл. 20210228.log . Время 13:53:02.192, open #155, iCloseB()=1.3434. Прилагаю файл журнала. Теперь, надеюсь, кто-нибудь мне ответит что делать с этими функциями iClose() и iOpen(), чтобы они работали. А то торговая система недостаточно эффективная. Пока всё. 2021.03.01_20:12 GMT+3.    

Попробуйте для переписать так, ведь это одно и тоже.

         if(Close[1]-Open[1]>0.0)
           {
            if(Close[0]-Open[0]>0.0)

 ну или, я так пишу

         if(Close[1]>Open[1])
           {
            if(Close[0]>Open[0])
              {
 
klub2003:

Всём привет!

Такая задача:
Цена пересекает МА вниз или вверх. 
Надо её запомнить, чтобы использовать далее в расчете количества пройденных пунктов.

Вот как я это понимаю:

double     FixPrice;        // переменная

   bool      Fix=false;        // маркер 

   if ( Fix==false) { 

       if ( Close[0] > MA_lo )   FixPrice = Close[0];   
   }                                                                              // делаем замер пока цена не пересечет МА

       if ( Close[0] < MA_lo )    Fix=true; 

       if ( Fix==true)                FixPrice_L = FixPrice ;

И вот дальше затык - цена не запоминается! 

Буду очень благодарен за помощь! 
//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//---

double     FixPrice;        // переменная ТАК БУДЕТ ЗАПОМИНАТЬСЯ. ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ
bool       Fix = false;      // маркер
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(Fix == false)
     {
      if(Close[0] > MA_lo)
         FixPrice = Close[0];
     }                                                                              // делаем замер пока цена не пересечет МА
   if(Close[0] < MA_lo)
      Fix = true;
   if(Fix == true)
      FixPrice_L = FixPrice ;
//+------------------------------------------------------------------+
  }
//+------------------------------------------------------------------+

Это как хотите вы, чтобы значение запоминалось.

Но имейте ввиду что на открытии свечи

Close[0]=Open[0] 
и Close[0]=High [0] и Close[0]=Low[0]



Поэтому, если вам нужно моментально, в режиме реального времени лучше использовать

double Bidd=NormalizeDouble(Bid,Digits); если цена сверху или
double Askk=NormalizeDouble(Askk,Digits); если цена снизу МА

double MA_lo=NormalizeDouble(MA_lo,Digits);

Лучше все цены, которые будут сравниваться, в условии, нормализовать, чтобы не удивляться :)

 
MakarFX:

Чтобы перевернуть ФИБО поменяй местами  р1 и р2

С алертом я не помогу(

MakarFX
:

Чтобы перевернуть ФИБО поменяй местами  р1 и р2

С алертом я не помогу(

Привет, благодарю, получил два разных решения, ваш самый простой .... 

Причина обращения: