andre71g
andre71g

 
Уровень 11

  Торгую в компаниях:


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

Рейтинг 2081



РЕКОМЕНДУЮ



Робот полуавтомат 3х3

Прошу создать робота-помощника:

Ордер бай открывается при касании линии b1.
Тейк — линия b3.
Стоп — линия s1.
Ордер селл открывается при касании линии s1.
Тейк — линия s3.
Стоп — линия b1.
Если цена пошла в нашу сторону и коснулась второй линии (b2 для бай или s2 для селл), то половина ордера закрывается(поэтому начальный ордер в настройках минимум = 0.02) и включается трал с начальным стопом на безубытке.
Шаг трала по умолчанию пусть будет 10п(пятизнак).
На графике нужны 2 кнопки — бай и сел — нажав их, мы разрешаем роботу открывать ордер в соответствующем направлении.
После включении кнопки робот может открыть только 1 ордер в этом направлении.
  • 0
  • Просмотров: 3154
  • 3 июня 2020, 21:23
  • andre71g
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
как строятся каналы?
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 4 июня 2020, 20:49
+
0
Не каналы, а просто линии — с помощью стандартного инструмента мт4 «Рисование трендовых линий». В «Свойствах Trendline» при построении линий мы указываем их названия(b1, b2, b3, s1, s2, s3), а вы к ним в коде привязываете действия, что прописаны в ТЗ.


Редактирован: 5 июня 2020, 06:42
avatar

  11  andre71g Автор Сообщений: 168 - andre71g

  • 5 июня 2020, 06:41
+
0
на 16-е
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 5 июня 2020, 17:42
+
0
часть закрыли остаток в бу:



www.opentraders.ru/downloads/2684/
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 9 июня 2020, 21:22
+
0
Андрей, есть один недостаток.
По умолчанию трендовые линии размещаются горизонтально.
Я попробовал их поставить под углом.
Потом поставил галочку «Разрешить советнику торговать» и нажал кнопки Бай и Сэлл.
Все мои установки слетели до исходного положения трендовых линий.
Пришлось выставлять заново.
Смещая линии, случайно зацепил точку цены и открыл ордер.
После всего выключил МТ4 и снова включил.
Трендовые линии из нужного положения снова оказались в положении по умолчанию и движение цены они уже не отслеживают.
Исправьте, пожалуйста.
Редактирован: 9 июня 2020, 22:04
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 9 июня 2020, 21:55
+
0
линии на исходную ставятся при инициализации советника. установите сразу все опции а потом двигайте линии
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 9 июня 2020, 22:39
+
0
Выставляю линии, нажимаю бай, нормально вроде. А вот при нажатии селл сразу открывается ордер, хотя до линии s1 ещё далеко. Продолжить тестить смогу завтра только, сейчас на работу.
avatar

  11  andre71g Автор Сообщений: 168 - andre71g

  • 10 июня 2020, 04:53
+
0
1. Установил советник на график.
2. Разрешил ему торговать.
3. Выставил линии под наклоном.
4. Нажал кнопки Бай и Селл.
Линии остались в установленном положении.
5. Перезагрузил МТ4.
Секунду-две линии еще находятся в нужном положении, а потом сбрасываются на положение по умолчанию.

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

  11  apologetest Сообщений: 284 - Юрий

  • 10 июня 2020, 07:35
+
0
Сегодня на удаленном сервере запустил робота по всем правилам.
Но при касании первой линии ордер не открылся.
В чем может быть причина?

А при запуске робота на ПК наблюдаю ту же картину, что и у Андрея — при нажатии селл сразу открывается ордер в Бай, хотя до линии 1 ещё далеко
Редактирован: 10 июня 2020, 18:08
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 10 июня 2020, 17:05
+
0
Вобщем понял я, почему открываются сделки, хотя до линии цена не дошла.Робот ждёт не касания линии, а уровня её ближайшего конца.Это даже не линия, а отрезок, и если он наклонный, у него есть минимум и максимум — во в этой зоне(между минимумом и максимумом) робот и открывает сделки. На скрине видно, что верхний конец отрезка s1 оказался выше цены, поэтому сразу после включения кнопки sell открылся соответствующий ордер.
И да Юрий правильно заметил, что слетают положения линий, даже если зайти в настройки робота и выйти, ничего в них не меняя ( 
avatar

  11  andre71g Автор Сообщений: 168 - andre71g

  • 11 июня 2020, 22:07
+
0
Андрей, что-то не то с советником.
Он не воспринимает наклонные линии. Не реагирует на них. За два дня я в этом убедился на разных МТ4 от разных брокеров.
Сегодня я линии не наклонял оставил как есть — горизонтально.
Запустил советника.
Цена пошла вниз к красным линиям. Совтник касание воспринял. Но вместо одного ордера начал открывать еще и еще по непонятному алгоритму.
Скрины прилагаю.


avatar

  11  apologetest Сообщений: 284 - Юрий

  • 11 июня 2020, 22:11
+
0
Я так понял, что Андрей уже не отслеживает комменты к этому топику и все доработки будет рассматривать в новом топике следующего месяца.
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 11:48
+
0
Попробуйте так:
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   b1=ObjectGetDouble(0,"B1",OBJPROP_PRICE1);
   b2=ObjectGetDouble(0,"B2",OBJPROP_PRICE1);
   b3=ObjectGetDouble(0,"B3",OBJPROP_PRICE1);

   s1=ObjectGetDouble(0,"S1",OBJPROP_PRICE1);
   s2=ObjectGetDouble(0,"S2",OBJPROP_PRICE1);
   s3=ObjectGetDouble(0,"S3",OBJPROP_PRICE1);

   BU();
   if(TrailingStop>0) Trailing();

   if(CountTrades()<1)
     {
      if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
        {
         if(Ask>b1)
            PutOrder(0,Ask);
        ObjectSetInteger(0,"B",OBJPROP_STATE,false); //--- отжать кнопку    
        }
      if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
        {
         if(Bid<s1)
            PutOrder(1,Bid);
         ObjectSetInteger(0,"S",OBJPROP_STATE,false); //--- отжать кнопку    
        }
     }

   if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,false);
     }

   Comment("\n B1: ",b1,
           "\n B2: ",b2,
           "\n B3: ",b3,
           "\n S1: ",s1,
           "\n S2: ",s2,
           "\n S3: ",s3);
  }
//+------------------------------------------------------------------+
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 12:36
+
0
Не хочет компилироваться.

avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 14:17
+
0
И нужно развернуть трендовые линии на 180 градусов.
Потому как с галочкой «луч» они имеют продолжение в прошлое.
Возможно, что и это влияет на результат.
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 14:25
+
0
Не видно весь код. Может скобку пропустили? У меня 0 ошибок 0 предупреждений.
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.2;      // лот
extern int TrailingStop  = 0;        // трал
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

double b1=0,b2=0,b3=0,s1=0,s2=0,s3=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutButton("B",100,160,"BUY");
   PutButton("S",100,120,"SELL");
   PutButton("C",100,80,"CLOSE");

   PutTrendLine("B1",Time[0],Bid+333*_Point,Time[111],Bid+333*_Point,Aqua);
   PutTrendLine("B2",Time[0],Bid+666*_Point,Time[111],Bid+666*_Point,Aqua);
   PutTrendLine("B3",Time[0],Bid+999*_Point,Time[111],Bid+999*_Point,Aqua);

   PutTrendLine("S1",Time[0],Bid-333*_Point,Time[111],Bid-333*_Point,Red);
   PutTrendLine("S2",Time[0],Bid-666*_Point,Time[111],Bid-666*_Point,Red);
   PutTrendLine("S3",Time[0],Bid-999*_Point,Time[111],Bid-999*_Point,Red);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,9);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
Весь код не входит. Поэтому частями.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 15:09
+
0
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool cl=1,m=1;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid>b2 && OrderLots()==Lots)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),b1,OrderTakeProfit(),0,clrAquamarine);
                  cl=OrderClose(OrderTicket(),OrderLots()/2,Bid,Slip,clrAquamarine);                  
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(Ask<s2 && OrderLots()==Lots)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),s1,OrderTakeProfit(),0,clrAquamarine);
                  cl=OrderClose(OrderTicket(),OrderLots()/2,Ask,Slip,clrAquamarine);                  
                 }
              }
           }
        }
     }
  }
  //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   double sl=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()<sl)
                    {          
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());                               
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()>sl || (OrderStopLoss()==0))
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());                    
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
      sl=NormalizeDouble(b1,_Digits);
      tp=NormalizeDouble(s3,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      sl=NormalizeDouble(s1,_Digits);
      tp=NormalizeDouble(b3,_Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   b1=ObjectGetDouble(0,"B1",OBJPROP_PRICE1);
   b2=ObjectGetDouble(0,"B2",OBJPROP_PRICE1);
   b3=ObjectGetDouble(0,"B3",OBJPROP_PRICE1);

   s1=ObjectGetDouble(0,"S1",OBJPROP_PRICE1);
   s2=ObjectGetDouble(0,"S2",OBJPROP_PRICE1);
   s3=ObjectGetDouble(0,"S3",OBJPROP_PRICE1);

   BU();
   if(TrailingStop>0) Trailing();

   if(CountTrades()<1)
     {
      if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
        {
         if(Ask>b1)
            PutOrder(0,Ask);
        ObjectSetInteger(0,"B",OBJPROP_STATE,false); //--- отжать кнопку    
        }
      if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
        {
         if(Bid<s1)
            PutOrder(1,Bid);
         ObjectSetInteger(0,"S",OBJPROP_STATE,false); //--- отжать кнопку    
        }
     }

   if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,false);
     }

   Comment("\n B1: ",b1,
           "\n B2: ",b2,
           "\n B3: ",b3,
           "\n S1: ",s1,
           "\n S2: ",s2,
           "\n S3: ",s3);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

Редактирован: 12 июня 2020, 18:19
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 15:10
+
0
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 15:12
+
0
А можно файлик получить?
Не компилируется.

avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 16:24
+
0
Замените весь свой советник полностью на эти 2 куска кода.
Редактор пишет что не видит
extern int Slip = 30; // реквот
extern int Magic = 123; // магик
но это не возможно!
или опять не качественно или не внимательно скопировали код.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 18:07
+
0
В коде всего штук по пять обращений к Slip и Magic!
А у вас 45 ошибок и не одного предупреждения.
Скорее всего потеряли скобки.
Выложите весь код при помощи ставки
как делаю я.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 18:15
+
0
Вот видео моих действий.
Что я делаю неправильно?
fex.net/ru/s/krdzczo
fex.net/ru/s/odass8k
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 19:05
+
0
видео смотреть нет желания.код покажите.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 19:22
+
0
Посмотрел это «немое кино».
Пол экрана внизу полоса черная.
Кодов ошибок не видать.
Как заменяли первую часть кода не увидел.
Будет код — посмотрю.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 19:30
+
0
Немое кино, потому как микрофон на компе сломан.
==========================================
А если єкран развернуть полностью, не пробовали?

Да и вообще сколько времени ушло на все эту переписку.
Не проще ли было файл скинуть?
Я ведь не программист, а простой трейдер.
Редактирован: 12 июня 2020, 20:59
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 20:53
+
0
Еще один вариант записи со звуком и на канале ЮТуб.
youtu.be/ZyZfdtUB9go
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 21:08
+
0
Вместо кино дайте код.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 21:39
+
0
Что это вообще такое — дать код?
Как его дать и где найти?
Я знаю хорошо МТ4, но МетаЭдитор и программирование для меня — темный лес.

Я не квалифицированный программист, а трейдер.
С какими-то элементарными понятиями о МетаЭдиторе — скопировать, вставить и нажать кнопку «Компилировать».
Редактирован: 12 июня 2020, 22:00
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 21:54
+
0
У меня тоже не компилируется.
ssg, что вам мешает выложить готовый файл исправленного советника?
avatar

  11  andre71g Автор Сообщений: 168 - andre71g

  • 12 июня 2020, 22:02
+
0
Я хочу посмотреть на то что вы компилируете.
Уже много раз сталкивался с тем, что оставляют кусок кода или строку, а потом говорят -не компилируется.
Откройте код ошибок по номерам и прочитайте что они обозначают.
Весь код я выложил, свой покажите.
Используйте кнопку code.

Редактирован: 12 июня 2020, 22:10
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 22:08
+
0
Час от часу не легче…
У меня нет такой кнопки code.
По крайне мере я ее не вижу.
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 22:16
+
0
Вы когда пишете сообщение взгляд немного на верх переведите. Кнопка до смайлика.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 22:18
+
0
На последнем скрине первая строчка в подале компилятор пишет вам проблема со скобкой строка 69 столбец 43.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 22:21
+
0
В общем ребята давайте так.Будет ваш код — постараюсь вам помочь.
У меня с кодом все в порядке.Это нужно вам, а не мне.
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 22:24
+
0
Эта, что ли?


Нажал и вставил то, что скопировал в Вашем посте в 12 июня 2020, 11:48

<code>//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BU()
  {
   bool cl=1,m=1;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid>b2 && OrderLots()==Lots)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),b1,OrderTakeProfit(),0,clrAquamarine);
                  cl=OrderClose(OrderTicket(),OrderLots()/2,Bid,Slip,clrAquamarine);                  
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(Ask<s2 && OrderLots()==Lots)
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),s1,OrderTakeProfit(),0,clrAquamarine);
                  cl=OrderClose(OrderTicket(),OrderLots()/2,Ask,Slip,clrAquamarine);                  
                 }
              }
           }
        }
     }
  }
  //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   double sl=0;

   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()<sl)
                    {          
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());                               
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()-Ask>TrailingStop*_Point)
                 {
                  sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
                  if(OrderStopLoss()>sl || (OrderStopLoss()==0))
                    {
                     Print("SL: ",sl, " TP: ",OrderTakeProfit());                    
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
      sl=NormalizeDouble(b1,_Digits);
      tp=NormalizeDouble(s3,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      sl=NormalizeDouble(s1,_Digits);
      tp=NormalizeDouble(b3,_Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   b1=ObjectGetDouble(0,"B1",OBJPROP_PRICE1);
   b2=ObjectGetDouble(0,"B2",OBJPROP_PRICE1);
   b3=ObjectGetDouble(0,"B3",OBJPROP_PRICE1);

   s1=ObjectGetDouble(0,"S1",OBJPROP_PRICE1);
   s2=ObjectGetDouble(0,"S2",OBJPROP_PRICE1);
   s3=ObjectGetDouble(0,"S3",OBJPROP_PRICE1);

   BU();
   if(TrailingStop>0) Trailing();

   if(CountTrades()<1)
     {
      if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
        {
         if(Ask>b1)
            PutOrder(0,Ask);
        ObjectSetInteger(0,"B",OBJPROP_STATE,false); //--- отжать кнопку    
        }
      if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
        {
         if(Bid<s1)
            PutOrder(1,Bid);
         ObjectSetInteger(0,"S",OBJPROP_STATE,false); //--- отжать кнопку    
        }
     }

   if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,false);
     }

   Comment("\n B1: ",b1,
           "\n B2: ",b2,
           "\n B3: ",b3,
           "\n S1: ",s1,
           "\n S2: ",s2,
           "\n S3: ",s3);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
</code>

Редактирован: 12 июня 2020, 22:23
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 22:23
+
0
Эта, эта. А первую часть кода заменили?
avatar

  16  ssg Сообщений: 817

  • 12 июня 2020, 22:25
+
0
Что значит «заменить первую часть кода»?
Где ее увидеть?
Как ее отличить от второй, третье и т.д.?

Редактирован: 12 июня 2020, 22:30
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 22:28
+
0
Неужели это так интересно в течение 12 часов издеваться над неграмотным в области программирования человеком?
Вместо того, чтобы просто по человечески сбросить готовый файл?
Или в этом есть некий «кайф»?
Не понимаю…
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 12 июня 2020, 23:07
+
0
Поверьте «кайфа» нет, а наоборот мягко говоря присутствует раздражение.
Вы хоть перечитайте мои посты.Я вам выложил весь советник в двух постах.
Дублирую пост первый:
Не видно весь код. Может скобку пропустили? У меня 0 ошибок 0 предупреждений.
#property copyright «Copyright 2020, AM2»
#property link «www.forexsystems.biz»
#property version «1.00»
#property strict

//--- Inputs
extern double Lots = 0.2; // лот
extern int TrailingStop = 0; // трал
extern int Slip = 30; // реквот
extern int Magic = 123; // магик

double b1=0,b2=0,b3=0,s1=0,s2=0,s3=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
PutButton(«B»,100,160,«BUY»);
PutButton(«S»,100,120,«SELL»);
PutButton(«C»,100,80,«CLOSE»);

PutTrendLine(«B1»,Time[0],Bid+333*_Point,Time[111],Bid+333*_Point,Aqua);
PutTrendLine(«B2»,Time[0],Bid+666*_Point,Time[111],Bid+666*_Point,Aqua);
PutTrendLine(«B3»,Time[0],Bid+999*_Point,Time[111],Bid+999*_Point,Aqua);

PutTrendLine(«S1»,Time[0],Bid-333*_Point,Time[111],Bid-333*_Point,Red);
PutTrendLine(«S2»,Time[0],Bid-666*_Point,Time[111],Bid-666*_Point,Red);
PutTrendLine(«S3»,Time[0],Bid-999*_Point,Time[111],Bid-999*_Point,Red);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
ObjectDelete(0,«B»);
ObjectDelete(0,«S»);
ObjectDelete(0,«C»);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
{
ObjectDelete(0,name);
ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(0,name,OBJPROP_FONT,«Arial»);
//--- установим размер шрифта
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,9);
//--- установим цвет текста
ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
{
bool cl;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
}
}
}
}
}
//+------------------------------------------------------------------+
Весь код не входит. Поэтому частями.
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 06:10
+
0
Дублирую пост второй:
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void BU()
{
bool cl=1,m=1;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(Bid>b2 && OrderLots()==Lots)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),b1,OrderTakeProfit(),0,clrAquamarine);
cl=OrderClose(OrderTicket(),OrderLots()/2,Bid,Slip,clrAquamarine);
}
}

if(OrderType()==OP_SELL)
{
if(Ask<s2 && OrderLots()==Lots)
{
m=OrderModify(OrderTicket(),OrderOpenPrice(),s1,OrderTakeProfit(),0,clrAquamarine);
cl=OrderClose(OrderTicket(),OrderLots()/2,Ask,Slip,clrAquamarine);
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Trailing()
{
bool mod;
double sl=0;

for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
{
if(Bid-OrderOpenPrice()>TrailingStop*_Point)
{
sl=NormalizeDouble(Bid-TrailingStop*_Point,_Digits);
if(OrderStopLoss()<sl)
{
Print(«SL: »,sl, " TP: ",OrderTakeProfit());
mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
return;
}
}
}

if(OrderType()==OP_SELL)
{
if(OrderOpenPrice()-Ask>TrailingStop*_Point)
{
sl=NormalizeDouble(Ask+TrailingStop*_Point,_Digits);
if(OrderStopLoss()>sl || (OrderStopLoss()==0))
{
Print(«SL: »,sl, " TP: ",OrderTakeProfit());
mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),0,Yellow);
return;
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
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;
sl=NormalizeDouble(b1,_Digits);
tp=NormalizeDouble(s3,_Digits);
}

if(type==0 || type==2 || type==4)
{
clr=Blue;
sl=NormalizeDouble(s1,_Digits);
tp=NormalizeDouble(b3,_Digits);
}

r=OrderSend(NULL,type,Lots,NormalizeDouble(price,_Digits),Slip,sl,tp,"",Magic,0,clr);
return;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()<2)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
b1=ObjectGetDouble(0,«B1»,OBJPROP_PRICE1);
b2=ObjectGetDouble(0,«B2»,OBJPROP_PRICE1);
b3=ObjectGetDouble(0,«B3»,OBJPROP_PRICE1);

s1=ObjectGetDouble(0,«S1»,OBJPROP_PRICE1);
s2=ObjectGetDouble(0,«S2»,OBJPROP_PRICE1);
s3=ObjectGetDouble(0,«S3»,OBJPROP_PRICE1);

BU();
if(TrailingStop>0) Trailing();

if(CountTrades()<1)
{
if(ObjectGetInteger(0,«B»,OBJPROP_STATE)==1)
{
if(Ask>b1)
PutOrder(0,Ask);
ObjectSetInteger(0,«B»,OBJPROP_STATE,false); //--- отжать кнопку
}
if(ObjectGetInteger(0,«S»,OBJPROP_STATE)==1)
{
if(Bid<s1)
PutOrder(1,Bid);
ObjectSetInteger(0,«S»,OBJPROP_STATE,false); //--- отжать кнопку
}
}

if(OrdersTotal()>0 && ObjectGetInteger(0,«C»,OBJPROP_STATE)==1)
{
CloseAll();
ObjectSetInteger(0,«C»,OBJPROP_STATE,false);
}

Comment("\n B1: ",b1,
"\n B2: ",b2,
"\n B3: ",b3,
"\n S1: ",s1,
"\n S2: ",s2,
"\n S3: ",s3);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 06:12
+
0
У вас не хватило желания совместить их в месте.Судя по репликам копировали только второй пост без первого.Как же вы «трейдеры» хотите заниматься автоторговлей? У вас в одной руке автомат Ак в другой руке рожок от автомата. Пошли в атаку, а соединить автомат и рожок не смогли.
Сразу претензия к заводу — у меня не стреляет.
Меня поражают фразы торговцев советниками: «Я не знаю Мкл». Для меня это
звучит как оправдание водителя совершившего ДТП: «Пьяный был».
Не обязательно уметь программировать (хотя желательно), но разбираться что делает тот или иной блок обязаны если хотите заниматься авто торговлей.
А если я (или другой) заложит в алгоритм команду — перевести все ваши деньги на мой (другой ) счет? Или по баксу в день переводить? Или данные скопировать, троян запустить.Это очень просто сделать.
Поэтому никогда не пользуйтесь экзешными (не открытыми) кодами.
Ладно, просто надоело это доводить через одного.Поэтому и просил ваш код выложить.
Р.С. полистайте на досуге, очень пригодиться book.mql4.com/ru/appendix/examples
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 06:32
+
0
Признаю, что недосмотрел фразу о разделении кода на две части.

Мой косяк…

Сегодня аккуратненько так скопировал первую часть кода. Получилось 115 строчек.
Потом добавил вторую часть. Всего строчек стало 286.

Но компиляция не состоялась. ((


Я две части свел в один текстовый файл и закинул на файлообменник.
Посмотрите, что там не так, пожалуйста.
fex.net/ru/s/9dlr1zv
Редактирован: 13 июня 2020, 08:48
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 13 июня 2020, 08:46
+
0
Требуют регистрации, не хочу.Хотя кино смотрел без проблем.
Что пишут при компиляции с самого начала?
Редактирован: 13 июня 2020, 09:16
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 08:54
+
0
Может мой текст не убрали — «Весь код не входит. Поэтому частями.»
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 08:55
+
0
Сейчас проверил число строк без комментариев — 284.
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 09:21
+
0
сделал чтобы линии не слетали после того как изменили их положение, только нужно изменить флаг в настройках или сразу ставите флаг фалсе и рисуете свои:


extern bool Lines  = 1;  // показывать линии


вход в советнике идет по правому концу линии, это нужно учитывать.
также нужно смотреть положение линий для бу. на то он и полуавтомат :) 

www.opentraders.ru/downloads/2684/

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 13 июня 2020, 10:31
+
0
Согласен;) 
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 10:57
+
0
вот блок расчета линий в настоящий момент времени, только их нужно протянуть дальше цены вправо. также здесь поправлен вход. он только между первой и второй линией:

   b1=ObjectGetValueByTime(0,"B1",Time[0]);
   b2=ObjectGetValueByTime(0,"B2",Time[0]);
   b3=ObjectGetValueByTime(0,"B3",Time[0]);

   s1=ObjectGetValueByTime(0,"S1",Time[0]);
   s2=ObjectGetValueByTime(0,"S2",Time[0]);
   s3=ObjectGetValueByTime(0,"S3",Time[0]);

   BU();
   if(TrailingStop>0)
      Trailing();

   if(CountTrades()<1)
     {
      if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
        {
         if(Ask>b1 && Ask<b2)
            PutOrder(0,Ask);
        }
      if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
        {
         if(Bid<s1 && Bid>s2)
            PutOrder(1,Bid);
        }
     }


если так удобнее обновлю в базе
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 13 июня 2020, 11:18
+
0
Огромная благодарность за проделанную работу!
Скачал новый вариант.
Все откомпилировалось без проблем. Ура!!!
1. Поставил советника на график.
2. Разрешил ему торговать.
3. Выставил линии.
4. Зашел в настройки и поставил false в «показывать линии». Закрыл настройки — линии остались на месте.
5. Нажал Бай и Сэлл.

Получилась вот такая картинка.


При таком положении линий советник должен работать?
Не знаю как в понедельник на реальном графике будет, но сегодня в тестере стратегий не сработал.

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

  11  apologetest Сообщений: 284 - Юрий

  • 13 июня 2020, 11:42
+
0
Пока писал свой пост пропустил этот:
— вот блок расчета линий в настоящий момент времени, только их нужно протянуть дальше цены вправо. также здесь поправлен вход. он только между первой и второй линией:

А разве в настоящий момент без предлагаемых исправлений вход не делается при касании ценой первой линии?
Редактирован: 13 июня 2020, 13:01
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 13 июня 2020, 11:51
+
0
А разве в настоящий момент без предлагаемых исправлений вход не делается при касании ценой первой линии?


что для вас касание линии? и что для машины?
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 13 июня 2020, 13:35
+
0
Раньше я понимал касание буквально. Как физическое.
Но потом Вы мне объяснили, что это не так.
На скрине есть трендовая линия (1) и точка цены (2).
Как только точка цены со следующим тиком окажется хоть на один пипс выше трендовой линии, мы считаем, что касание произошло и открываем ордер по этой сформировавшейся цене.
Правильно понимаю?


А как в данный момент работает советник?
Редактирован: 13 июня 2020, 14:08
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 13 июня 2020, 14:07
+
0
Как только точка цены со следующим тиком окажется хоть на один пипс выше трендовой линии, мы считаем, что касание произошло и открываем ордер по этой сформировавшейся цене. А как в данный момент работает советник?


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

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 13 июня 2020, 16:18
+
0
Теперь понял что имелось ввиду… ))


Обновляйте…
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 13 июня 2020, 16:23
+
0
Разобрались почему не могли скомпилировать? Какая была причина?
А учебник прочитайте. Начните именно с той страницы что я отправил.
Там доходчивым языком поясняют на простых примерах что и как работает.
Каждая строка кода с пояснениями.
Редактирован: 13 июня 2020, 20:35
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 20:06
+
0
добавил:

1. продолжение линии вправо.
2. толщина линий.
3. стиль линий.
4. цвет линий.
5. удаление линий при деинициализации.
6. отключение выставления линий в начале работы.
7. расчет значений линий в данный момент.



www.opentraders.ru/downloads/2684/

avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 13 июня 2020, 20:43
+
0
Я внимательно пересмотрел файли с объединенными частями кода.
Нет ни одной лишней фразы.
Попробуйте скачать файлик отсюда
yadi.sk/d/onpdDe9hLCvJfQ

А со статьей знакомлюсь потихоньку.
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 13 июня 2020, 20:46
+
0
В общем все ясно.
У вас с самого начала неправильно с копировалось.
Элементарные ошибки по незнанию начальных правил.
В таких случаях начинайте смотреть самую первую ошибку.
У вас в коде: #property copyright «Copyright 2020, AM2»
А должно быть как у меня :
#property copyright "Copyright 2020, AM2"

Сравните каждую букву и каждый символ и найдите разницу.
Когда я вам разъяснял что нужно делать сначала привел код через кнопку код.
Затем тот же код я вам показывал через текст.
Вы по незнанию основ сначала скопировали только вторую часть кода, а затем взяли обе части, но не из файла с кодом, а из текста.
А там произошли изменения в написании.
Вам домашнее задание (если конечно вы хотите разобраться <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/017.gif' alt=' ;) '>&nbsp;  пройдитесь по всему коду и внесите необходимые изменения.
Потом с компилируйте весь код.
Первое я уже сделал.
Подсказка: пробежал глазами по коду везде одно и та же ошибка.<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/017.gif' alt=' ;) '>&nbsp; 

Редактирован: 13 июня 2020, 21:37
avatar

  16  ssg Сообщений: 817

  • 13 июня 2020, 21:36
+
0
Понял, буду изучать.
============================
Вопрос по советнику.
На некоторых инструментах наблюдается слияние линий.
Или же совершенно огромные расстояния между ними.
Как с этим справиться?



avatar

  11  apologetest Сообщений: 284 - Юрий

  • 14 июня 2020, 19:49
+
0
Как с этим справиться?


рисовать ручками
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 14 июня 2020, 21:00
+
0
Если я правильно понял, то нет необходимости двигать линии, нарисованные по умолчанию.
Можно просто в самом начале работы с индикатором удалить линии, потом снять true в «показывать линии» и самостоятельно выставлять трендовые.
А советник сам уже разберется где первая, где вторая, а где третья?
Если это так, то размещение линий намного упрощается… ))
Редактирован: 14 июня 2020, 21:20
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 14 июня 2020, 21:17
+
0
Уважаемые программисты!
Благодарю за проделанную работу!

Сегодня запустил робота на реальном счете.
Он чудесно открыл ордер на первой линии и прекрасно закрыл половину объема на второй линии.
Но на третьей линии советник ордер на закрыл.
Пришлось помочь ему руками.


Прошу отредактировать этот момент.
Редактирован: 15 июня 2020, 16:00
avatar

  11  apologetest Сообщений: 284 - Юрий

  • 15 июня 2020, 15:59
+
0
Сразу видно, что при открытии ордера робот выставляет стоп и тейк на соответствующих линиях на тот момент. Это тоже вариант, но не по техзаданию. И нужно целый день сидеть-наблюдать, где лучше бы тейк закрыть или лося.Поэтому просьба сделать закрытие ордеров именно при касании крайних линий.
avatar

  11  andre71g Автор Сообщений: 168 - andre71g

  • 15 июня 2020, 16:28
+
0
БУ выставляется без учёта спреда, не говоря уж о комиссии и свопе.
После выставления БУ сов должен сразу начинать тралить с шагом 10п(4хзнак), этого не происходит при трал=0 в настройках. Если придать тралу значение, то тралит. Но расстояния между 1(открытие ордера) и 2(перевод в бу) линиями всегда разные, тем более на разных ТФ. Лучше бы уж трал по умолчанию включался сразу после перевода в бу.
Ну и как уже писали выше, закрытие ордера хотелось бы видеть при касании линий b3 и s3.
avatar

  11  andre71g Автор Сообщений: 168 - andre71g

  • 15 июня 2020, 17:20
+
0
доработка в следующем топике. здесь и так прилично времени ушло
avatar

  34  AM2 Сообщений: 15869 - Андрей

  • 15 июня 2020, 17:29
+
0
Нечто похожее сделал для МТ5 http://s22aa.opentraders.ru/54889.html
avatar

  7  s22aa Сообщений: 25 - Александр

  • 16 июня 2020, 10:00

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