Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ




Лучшее от axe44



Крутые памм-счета Комментариев 6
2017-10-24 11:58:58Рейтинг 0

БКС Комментариев 8
2017-08-11 02:57:12Рейтинг 0

торги
2017-01-26 00:01:37Рейтинг 0

HelloDual v3.0 Комментариев 3
2017-11-19 02:21:03Рейтинг 0

Создание советников бесплатно Комментариев 2
2017-07-16 22:54:20Рейтинг 0

Простая цена закрытия

Здравствуйте программисты.

Хочу собрать код на основе массива, но с ними ни разу не работал. Сложение, вычитание, сравнение — всё тёмный лес.

Идея простая — уровни.
Поиск уровней по ценам закрытия.

Например в параметре советника (желательно на основе советника, так как советники не мешают терминалу работать) указать колличество уровней. Потом цены закрытия за период перенести в массив. Выделить ключевые значения горизонтальной линией. Что бы все уровни не были в одной области, добавить небольшой фильтр.

Спасибо, если возьмётесь.
  • 0
  • Просмотров: 1987
  • 3 мая 2020, 10:41
  • axe44
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Сова
Следующая запись в группе  
Советник на зигзаге
02 мая 2020
04 мая 2020

Брокер для ваших роботов, 15 лет на рынке

Комментарии (15)

+
0
скрины
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 3 мая 2020, 11:05
+
0
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 3 мая 2020, 11:42
+
0
могу написать такой пример: в массиве есть уровни, при пересечении свечой каждого уровня снизу вверх открываем бай
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 3 мая 2020, 12:26
+
0
Супер
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 3 мая 2020, 15:37
+
0
завтра набросаю с утра
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 3 мая 2020, 22:20
+
0
уровни из настроек передаются в массив и при пересечении уровня вверх покупаем, вниз продаем:



www.opentraders.ru/downloads/2649/
avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 4 мая 2020, 07:16
+
0
Спасибо ещё раз. Посмотрю что можно изменить и потом отпишусь
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 4 мая 2020, 07:31
+
0
//+------------------------------------------------------------------+
//|                                                        Level.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input double Lots    = 0.1;      // лот
input int StopLoss   = 0;        // лось
input int TakeProfit = 300;      // язь
input int Slip       = 30;       // реквот
input int Magic      = 123;      // магик

input int OpLevel    = 3;        // количество уровней 

datetime t=0;
double level[6],prise; 
int x,y,LevPrise;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---//тут через цикл наверно можно проработать количество уровней double MathCeil
prise=Bid; //цена 
x=1;y=x;
for ( x; x<=OpLevel; x++)//запускаем цикл установок уровней
   {
   //цикл уровней вверх
   LevPrise = MathFloor(prise*100+x);//округляем уровни вверх для цен и добавляем шаг (для текущей цены шаг 1)
   level[y](string)="Level"+y; // тут у меня ошибка в названии
   PutHLine((string)level[y],LevPrise/100,Red);
   y++;
   //цикл уровней вниз
   LevPrise = MathFloor(prise*100-x);//округляем уровни вверх для цен и добавляем шаг (для текущей цены шаг 1)
   level[y]="Level"+y;// тут у меня ошибка в названии
   PutHLine((string)level[y],LevPrise/100,Red);
   y++;
   }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+

Попробовал запуск уровней через цикл… и сразу ошибки.
У меня не получается сложить название уровня с номером цикла.

Как правильно?
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 4 мая 2020, 08:45
+
0
У меня не получается сложить название уровня с номером цикла.

Как правильно?


так:


   for(int i=0; i<ArraySize(level); i++)
     {
      PutHLine("Level "+(string)i,level[i],Red);
     }





//+------------------------------------------------------------------+
//|                                                        Level.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input double Lots    = 0.1;      // лот
input int StopLoss   = 0;        // лось
input int TakeProfit = 50;       // язь
input int Slip       = 30;       // реквот
input int Magic      = 123;      // магик

input double Level1  = 1.07;
input double Level2  = 1.075;
input double Level3  = 1.08;
input double Level4  = 1.085;
input double Level5  = 1.09;
input double Level6  = 1.095;

datetime t=0;
double level[6];

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   level[0]=Level1;
   level[1]=Level2;
   level[2]=Level3;
   level[3]=Level4;
   level[4]=Level5;
   level[5]=Level6;

   for(int i=0; i<ArraySize(level); i++)
     {
      PutHLine("Level "+(string)i,level[i],Red);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//ObjectsDeleteAll(0,0,OBJ_HLINE);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)
         sl=NormalizeDouble(price+StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price-TakeProfit*_Point,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)
         sl=NormalizeDouble(price-StopLoss*_Point,_Digits);
      if(TakeProfit>0)
         tp=NormalizeDouble(price+TakeProfit*_Point,_Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Горизонтальная линия                                             |
//+------------------------------------------------------------------+
void PutHLine(string name,double p,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      for(int i=0; i<ArraySize(level); i++)
        {
         if(Close[1]>level[i] && Open[1]<level[i])
           {
            PutOrder(0,Ask);
           }
         if(Close[1]<level[i] && Open[1]>level[i])
           {
            PutOrder(1,Bid);
           }
        }
      t=Time[0];
     }
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16256 - Андрей

  • 4 мая 2020, 09:34
+
0


Победил немного сам алгоритм.
Идея была в том что бы задать параметр поиска вычислений вверх и вниз от текущей ситуации на рынке, потом наверно сделаю построже поиск.

Сам код

//+------------------------------------------------------------------+
//|                                                        Level.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

input double Lots    = 0.1;      // лот
input int StopLoss   = 0;        // лось
input int TakeProfit = 300;      // язь
input int Slip       = 30;       // реквот
input int Magic      = 123;      // магик

input int OpLevel    = 3;        // количество уровней 

datetime t=0;
double level[100],prise,xyz,LevPrise; 
int x,y;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---//тут через цикл наверно можно проработать количество уровней double MathCeil
prise=MarketInfo(NULL,MODE_BID);; //цена 
x=0;y=x;

for ( x; x<OpLevel; x++)//запускаем цикл установок уровней
   {
   //цикл уровней вверх
   LevPrise = MathCeil(prise*100+x);//округляем уровни вверх для цен и добавляем шаг (для текущей цены шаг 1)
   xyz = LevPrise/100;
   level[y] = xyz; // тут у меня ошибка
   PutHLine((string)level[y],level[y],Red);
   y++;
   Print( LevPrise, " = LevPrise, ",xyz," = level[",y,"]");
   //цикл уровней вниз
   LevPrise = MathCeil(prise*100-x);//округляем уровни вверх для цен и добавляем шаг (для текущей цены шаг 1)
   xyz = LevPrise/100;
   level[y] = xyz; // тут у меня ошибка 
   PutHLine((string)level[y],level[y],Red);
   y++;
   Print( LevPrise, " = LevPrise, ",xyz," = level[",y,"]");
   }
//---
   return(INIT_SUCCEEDED);
  }

Но ошибка тут level[y] = xyz; // тут у меня ошибка
Дело в том что параметр xyz не присвивается в параметр level[y]. Это я проверял через принт Print( LevPrise, " = LevPrise, ",level[y]," = level[",y,"]");.

Если не сложно, помогите. Спасибо.
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 4 мая 2020, 17:36
+
0


Доделал алгоритм. Теперь робот делает уровни автоматически в местах остановок. Если кому интересно, могу поделиться. Цена чисто символически «сколько не жалко». Обращайтесь в личку.
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 мая 2020, 10:31
+
0
А уровни по зигзагу не тоже самое: я про «автоматически в местах остановок»
avatar

  20  alex30774 Сообщений: 748

  • 14 мая 2020, 10:39
+
0
Этот индикатор выставляет уровни в максимумах.
У меня там где чаще всего останавливается. То есть идея в том, что если уровень остановки проходим, то перескакиваем большинство, а значит идём по движению.
Пока это на уровне индикатора. Если будет поддержка деньгами, выложу более-менее рабочую версию.
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 мая 2020, 10:59
+
0
Хочешь попробовать?
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 мая 2020, 11:20
+
0
КУ!!! *war* 
avatar

  13  axe44 Автор Сообщений: 1149 - Алек

  • 14 мая 2020, 10:37

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий