int init() - страница 3

 
Vinin:

Я пока так и не понял. Вы хотите сделать индикатор или советник.

Посмотрите на индикатор. Может поможет чем-то

 

Советник и только советник!!!
 
gergi:
Советник и только советник!!!
Хорошо. Скайп в профиле на пятерке есть. Обращайтесь. По вечерам смогу помочь
 
gergi:

Очень интересно. То есть вместо того, что я наворотил можно использовать функцию iClose(). У этой функции есть все ценовые данные прошлого бара следующего за нулевым. А функция iOpen() подойдет только для индикатора со всеми его массивами. 

У меня вопрос. Я создаю 3 буфера. 2 с максимальными ценами и один с минимальной.  Функция int handle = FileOpen("file.csv"FILE_CSV|FILE_WRITE";"); одинаково правильно будет возвращать значения  или сделать int handle1, int handle2, int handle3?

int handle = FileOpen("file.csv"FILE_CSV|FILE_WRITE";");
  if(handle>0)
    {
     // запись заголовков столбцов таблицы
     FileWrite(handle, "Time;Open;High;Low;Close;Volume");
     // запись данных
     for(int i=0; i<Bars; i++)
       FileWrite(handle, Time[i], Open[i], High[i], Low[i], Close[i], Volume[i]);
     FileClose(handle);
    }

Подскажите как из этой  функции в советнике получить значения High[i], Low[i],

 
Подскажите как из этой  функции в советнике получить значения High[i], Low[i],
Написать свой парсер.
 
PozitiF:
Написать свой парсер.
Что такое парсер
 
Vinin:
Хорошо. Скайп в профиле на пятерке есть. Обращайтесь. По вечерам смогу помочь
Доброго времени суток. Посмотрите пожалуйста код. Проблема в в том, что не  могу получить числовые значения. Если при запросе ордера High[23]>Low[22] ордер выполняется. То есть значения буфера поступают. Еще поступило предложение написать свой пасер. Есть примеры парсеров в mql4?
Файлы:
nozphnok.mq4  14 kb
 
gergi:
Доброго времени суток. Посмотрите пожалуйста код. Проблема в в том, что не  могу получить числовые значения. Если при запросе ордера High[23]>Low[22] ордер выполняется. То есть значения буфера поступают. Еще поступило предложение написать свой пасер. Есть примеры парсеров в mql4?

Имена файлам разные надо давать.

   int handle21 = FileOpen("file1.csv", FILE_CSV|FILE_WRITE, ";");
   int handle22 = FileOpen("file2.csv", FILE_CSV|FILE_WRITE, ";");
   int handle23 = FileOpen("file3.csv", FILE_CSV|FILE_WRITE, ";");

 Хотя бы так

 

Посмотрите еще файловые операции 

 

Так делать нельзя

   if(MaCurrent5<MaPrevious5 && MaPrevious5>MaPrevious52 &&
      (MaCurrent5-MaCurrent20)>0.0030  && MaCurrent5>MaCurrent20 &&  MaCurrent20>MaPrevious20 &&
      StochasticMainBufferCurrent>70
      && StochasticSignalBufferCurrent<StochasticMainBufferCurrent && StochasticSignalBufferPrevious>StochasticMainBufferPrevious
      ) 
      {
      handle21=1;
      Print("пятерка пересекла двадцатку сверху вниз");
      }

 Потеряем хэндл открытого файла.

 

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

   if(handle22>0) 
    { 
     // запись заголовков столбцов таблицы 
     FileWrite(handle22, "Time;Open;High;Low;Close;Volume"); 
     // запись данных 
     for(int i=0; i<Bars; i++) 
       FileWrite(handle22, Time[i], Open[i], High[i], Low[22], Close[i], Volume[i]); 
    //FileClose(handle22); 
    }  

 

 

Условие не корректное

       if(handle22==1 &&

 

Для начала можно было бы обойтись без записи в файл. Просто сделать работоспособный код

 
Vinin:

Имена файлам разные надо давать.

 Хотя бы так

 

Посмотрите еще файловые операции 

 

Так делать нельзя

 Потеряем хэндл открытого файла.

 

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

 

 

Условие не корректное

 

 

Для начала можно было бы обойтись без записи в файл. Просто сделать работоспособный код

 

Vinin:

Имена файлам разные надо давать.

 Хотя бы так

 

Посмотрите еще файловые операции 

 

Так делать нельзя

 Потеряем хэндл открытого файла.

 

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

 

 

Условие не корректное

 

Для начала можно было бы обойтись без записи в файл. Просто сделать работоспособный код

 

Доброго времени суток. Тогда как как мне получить значения high && low не создавая буферы и не записывая эти значения в отдельные файлы. Из какой функции их можно вынуть по отдельности и какая у них табуляция? Точка или запятая и сколько знаков после нуля?
 
gergi:
Доброго времени суток. Тогда как как мне получить значения high && low не создавая буферы и не записывая эти значения в отдельные файлы. Из какой функции их можно вынуть по отдельности и какая у них табуляция? Точка или запятая и сколько знаков после нуля?

Убрал лишнее  из Вашего кода

//+------------------------------------------------------------------+
//|                                                         Фибо.mq4 |
//|                                                   Ковальчук Г.К. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Ковальчук Г.К."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
input double TakeProfit    =100;
input double Lots          =0.1;
input double TradeStop     =50;
//int KPeriod=1;
//input double TrailingStop  =30;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick(void)
  {

   if(Bars<100) // Вместо 100 нужно указать необходимое количество баров для анализа и расчета индикаторов
     {
      Print("bars less than 100");
      return;
     }
   if(TakeProfit<10) // Контроль зададнных параметров минимальный
     {
      Print("TakeProfit less than 10");
      return;
     }

// Получение данных для анализа

// Данные индикатора Стохастик
   double StochasticMainBufferCurrent   = iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,0,MODE_MAIN,0);
   double StochasticMainBufferPrevious  = iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,0,MODE_MAIN,1);
   double StochasticMainBufferPrevious2 = iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,0,MODE_MAIN,2);

   double StochasticSignalBufferCurrent   = iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,1,MODE_MAIN,0);
   double StochasticSignalBufferPrevious  = iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,1,MODE_MAIN,1);
   double StochasticSignalBufferPrevious2 = iStochastic(NULL,PERIOD_H1,5,3,3,MODE_SMA,1,MODE_MAIN,2);

// Данные индикатора Moving Averages

   double MaCurrent5   = iMA(NULL,PERIOD_H1,5,0,MODE_EMA,PRICE_CLOSE,0);
   double MaPrevious5  = iMA(NULL,PERIOD_H1,5,0,MODE_EMA,PRICE_CLOSE,1);
   double MaPrevious52 = iMA(NULL,PERIOD_H1,5,0,MODE_EMA,PRICE_CLOSE,2);

   double MaCurrent20  = iMA(NULL,PERIOD_H1,20,0,MODE_EMA,PRICE_CLOSE,0);
   double MaPrevious20 = iMA(NULL,PERIOD_H1,20,0,MODE_EMA,PRICE_CLOSE,1);

// Получаем данные из таймсерии текущего таймфрейма
// Трудно понять зачем используется 22 и 23 бар. Но видимо так надо
   double ABd=(Low[22]-High[21]);
   double BCd=(Low[22]-High[23]);
   double Y1d=(High[23]+(0.618*ABd));

//Анализ полученных данных. Для фиксации данны используем флаги

   bool UP1=false, UP2=false, UP3=false;
   bool DN1=false, DN2=false, DN3=false;
// Первая свеча
   if(MaCurrent5<MaPrevious5 && MaPrevious5>MaPrevious52 && 
      (MaCurrent5-MaCurrent20)>0.0030 && MaCurrent5>MaCurrent20 && MaCurrent20>MaPrevious20 && 
      StochasticMainBufferCurrent>70
      && StochasticSignalBufferCurrent<StochasticMainBufferCurrent && StochasticSignalBufferPrevious>StochasticMainBufferPrevious
      )
     {
      UP1=true;
      Print("пятерка пересекла двадцатку сверху вниз");
     }

   if(MaCurrent5<MaPrevious20 && MaPrevious5>MaPrevious20)
     {
      DN1=true;
      Print("пtерекрестие вниз");
     }


// Вторая свеча
   if(MaCurrent5>MaPrevious5 && MaPrevious5<MaPrevious52 && 
      (MaCurrent20-MaCurrent5)>0.0030 && MaCurrent5<MaCurrent20 && MaCurrent20>MaPrevious20 && 
      StochasticMainBufferCurrent<30
      && StochasticSignalBufferCurrent>StochasticMainBufferCurrent && StochasticSignalBufferPrevious<StochasticMainBufferPrevious
      )
     {
      UP2=true;
      Print("пятерка пересекла двадцатку снизу вверх");
     }

   if(MaCurrent5>MaCurrent20 && MaPrevious5<MaPrevious20)
     {
      DN2=true;
      Print("пtерекрестие вверх");
     }
// Третья свеча
   if(MaCurrent5<MaPrevious5 && MaPrevious5>MaPrevious52 && 
      (MaCurrent5-MaCurrent20)>0.0030 && MaCurrent5>MaCurrent20 && MaCurrent20>MaPrevious20 && 
      StochasticMainBufferCurrent>70
      && StochasticSignalBufferCurrent<StochasticMainBufferCurrent && StochasticSignalBufferPrevious>StochasticMainBufferPrevious
      )
     {
      UP3=true;
      Print("пятерка пересекла двадцатку сверху вниз");
     }

   // Трудно понять зачем анализируются 21, 22 и 23 бар. Но видимо так надо
   
   if(High[21]>Low[22] && Low[22]<High[23] && High[21]>High[23])
     {
      DN3=true;
      Print("Цены 3 баров вниз получены");
     }


   int total=OrdersTotal();
   int ticket;

// Проверка возможности открыть позицию. При возможности открыть нужную

   if(total<1)
     {
      //--- no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ",AccountFreeMargin());
         return;
        }
      //--- check for long position (BUY) possibility
      if(UP1 || UP2 || UP3)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,8,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
        }
      if(DN1 || DN2 || DN3)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,8,0,Bid-TakeProfit*Point,"Фибо",16384,0,Red);
        }
     }
  }
//+------------------------------------------------------------------+

 Может оно конечно логику надо поменять, но я в нее не вникал

 
Vinin:

Убрал лишнее  из Вашего кода

 Может оно конечно логику надо поменять, но я в нее не вникал

Доброго времени суток. Прошу прощения за инглиш. Труе и фелс это по сути 1 и 0. При первой свече по индикаторам (если правда) нужно получить первое право для дальнейшего анализа и числовое значение для формулы. На второй и третьей свечах также нужны числовые значения для формул и право на дальнейший анализ. Если советник не понимает других значений кроме 1 и 0, то по сути правильно числовые значения получать из  записанных в память файлов в память компа и дальше их извлекать для формулы. Поэтому я и задавал вопрос нужно мне или нет сначала объединить несколько индикаторов в 1, чтобы создать в нем буферы с числовыми значениями, которые потом можно будет использовать в формулах в советнике? По сути при открытии ордера советник понимает, что такое бид и аск и может посчитать числовые значения. 

Вопрос как в советнике создать буфер с числовыми значениями, которые потом можно использовать в формулах в советнике?