droba
Droba

 
Уровень 9

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Прошу написать советник

Доброго времени суток.
Прошу написать советник выставляющий лимитные ордера.
1.Советник выставляет лимитный ордера каждый день на дневном графике.
На бычьей свече SELLLIM на медвежьей BUYLIM.
2.Лот, TP, S/L.
Алгоритм выставления ордеров показан на скринах.

  • 0
  • Просмотров: 1597
  • 19 января 2023, 15:24
  • droba
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Если Андрей не против, попробую написать.
avatar

  14  verta81 Сообщений: 392

  • 19 января 2023, 15:32
+
0
Итого: сколько лимитных ордеров будет выставлено? Предполагаю, что ТЗ неполное. Может надо задать «время жизни» лимитного ордера? В первом примере — после медвежьей свечи выставили байлимит и как минимум ближайшие 25 дней этот ордер не сработает.
avatar

  18  Boris54 Сообщений: 810 - ПенSионер

  • 19 января 2023, 15:44
+
0
За 25 дней наберется 25 отложенных ордеров: получается большая нагрузка на депозит.
Редактирован: 19 января 2023, 18:07
avatar

  18  Boris54 Сообщений: 810 - ПенSионер

  • 19 января 2023, 18:02
+
0
Лимитку можно и ручками удалить. За любым советником надо следить.
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 20 января 2023, 03:44
+
+1
avatar

  14  verta81 Сообщений: 392

  • 19 января 2023, 21:19
+
0
Всё работает классно, но отложки удалять не нужно и выставлять каждый день. Переделать можно на каждый день.
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 20 января 2023, 04:01
+
0
Добавьте в настройки:

extern bool   Del          = true;     // Удалять вчерашние ордера


и в главную функцию:

if(Del) DelOrder();

получите возможность удалять или нет вчерашние ордера.
Кроме этого, мне кажется, надо добавить ограничение на минимальный размер дневной свечи. Можно избежать выставления ордеров по схожей цене при флете и избежать избыточного кол-ва ордеров и нагрузки на депозит.
avatar

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

  • 20 января 2023, 06:40
+
0
Вчерашние удалять нет смысла- система для долгосрочных сделок.
А вот «ограничение на минимальный размер свечи» — дельное предложение!
avatar

  18  Boris54 Сообщений: 810 - ПенSионер

  • 20 января 2023, 08:39
+
0
Нужно что бы отложки выставлял каждый день.
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 20 января 2023, 08:39
+
0

//+------------------------------------------------------------------+
//|                                                      DayFibo.mq4 |
//|                                               Copyright 2022, Ve |
//|                                             kupiscript@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Ve"
#property link      "kupiscript@yandex.ru"
#property version   "1.00"
#property strict

extern int CandleHeight     =200;      // мин. размер свечи
extern double Lots         = 0.01;     // Лот
extern int TakeProfit      = 200;      // Тейк
extern int StopLoss        = 600;      // Лось
extern int Slip            = 10;       // Проскальзывание
extern bool   Del          = true;     // Удалять вчерашние ордера
extern int Magic           = 0;        // Magic
//----------------------------------------------
double L_423,L_0,L_100,Delta;
datetime CandleTime;
double values[]={0.0, 0.382, 0.618, 1, 1.618, 2.618, 4.263}; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Lime;
   double tp=0,sl=0;

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

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

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"DayFibo",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                     NewBar                                       |
//+------------------------------------------------------------------+ 
bool NewCandle()
  {
   if(CandleTime==iTime(NULL,PERIOD_D1,0)) 
     return false;
   else
     {
      CandleTime=iTime(NULL,PERIOD_D1,0);
      return true;
     }
}
//+------------------------------------------------------------------+
//|           Подсчет рыночных ордеров                               |
//+------------------------------------------------------------------+
int CountTrades(int type=-1)
  {
   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()==type || (OrderType()<2 && type==-1))
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1)
               del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double high=iHigh(NULL,PERIOD_D1,1);
   double low=iLow(NULL,PERIOD_D1,1);
   double open=iOpen(NULL,PERIOD_D1,1);
   double close=iClose(NULL,PERIOD_D1,1);
   datetime t1=iTime(NULL,PERIOD_D1,1);
   datetime t2=iTime(NULL,PERIOD_D1,1);
   bool candle_delta=MathAbs(high-low)>=CandleHeight*_Point;
   //------------------------------------------------------
   if(NewCandle() && candle_delta)
     {
      if(open>close || open<close)
        {
          If(Del) DelOrder();
         FiboLevelsCreate(t1,open>close?low:high,t2,open>close?high:low,open>close?clrDodgerBlue:clrSandyBrown);
        }
      //---------------------------------------------------
      if(ObjectFind(0,"FiboLevels")==0 && CountTrades()<1)
       {
        L_0=ObjectGetDouble(0,"FiboLevels",OBJPROP_PRICE,1);
        L_100=ObjectGetDouble(0,"FiboLevels",OBJPROP_PRICE,0);
        Delta=MathAbs(L_0-L_100);
     
        if(L_100<L_0 && CountTrades(2)<1)
          {
           L_423=NormalizeDouble(L_0-(Delta*4.236),_Digits);
           PutOrder(2,L_423);
          }
        if(L_100>L_0 && CountTrades(3)<1)
          {
           L_423=NormalizeDouble(L_0+(Delta*4.236),_Digits);
           PutOrder(3,L_423);
          }
       }
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+ 
//| Cоздает "Уровни Фибоначчи" по заданным координатам               | 
//+------------------------------------------------------------------+ 
bool FiboLevelsCreate(datetime time1,double price1,datetime time2,double price2,color colors)
  {
   long chart_ID=0;        // ID графика 
   string name="FiboLevels"; // имя объекта 
   int sub_window=0;      // номер подокна  
   color clr=clrYellow;        // цвет объекта 
   ENUM_LINE_STYLE style=STYLE_DASH; // стиль линии объекта 
   int width=1;           // толщина линии объекта 
   bool back=false;        // на заднем плане 
   bool ray_right=true;   // продолжение объекта вправо 
   
   int levels=ArraySize(values);
//--- сбросим значение ошибки 
   ResetLastError(); 
   if(ObjectFind(0,name)!=-1)
     ObjectDelete(chart_ID,name);
//--- создадим "Уровни Фибоначчи" по заданным координатам 
   ObjectCreate(chart_ID,name,OBJ_FIBO,sub_window,time1,price1,time2,price2);
//--- установим цвет 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линии 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим продолжения отображения объекта вправо 
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right); 
   ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels); 
   ObjectSetInteger(chart_ID,name,OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS); 
//--- установим количество уровней 
   ObjectSetInteger(chart_ID,name,OBJPROP_LEVELS,levels); 
//--- установим свойства уровней в цикле 
   for(int i=0;i<levels;i++) 
     { 
      //--- значение уровня 
      ObjectSetDouble(chart_ID,name,OBJPROP_LEVELVALUE,i,values[i]); 
      //--- цвет уровня 
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELCOLOR,i,colors); 
      //--- стиль уровня 
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELSTYLE,i,style); 
      //--- толщина уровня 
      ObjectSetInteger(chart_ID,name,OBJPROP_LEVELWIDTH,i,width); 
      //--- описание уровня 
      ObjectSetString(chart_ID,name,OBJPROP_LEVELTEXT,i,DoubleToString(100*values[i],1)); 
     }
   ChartRedraw();
   return(true); 
  } 
avatar

  14  verta81 Сообщений: 392

  • 20 января 2023, 08:57
+
0
Добавил минимальный размер свечи для натяжки фибы и установки ордера.
Тригер удаления ордеров true/false
avatar

  14  verta81 Сообщений: 392

  • 20 января 2023, 08:58
+
0


ТФ D1, тренд брал с месяца.


ТФ Н4 тренд недельный
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 27 января 2023, 06:47
+
0
Только короткие позиции? В лонг не сделок.
avatar

  14  verta81 Сообщений: 392

  • 27 января 2023, 08:51
+
0
Да, недельный тренд селовский.
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 27 января 2023, 09:31
+
0


А вот лонги с 3 октября по сегодняшний день на Н4. На недельном ТФ тренд баевский. Тут некоторые говорили, что уровни не обоснованы и стратегия не заслуживает внимания. А главный закон ФОРЕКС ни кто не отменял.
Редактирован: 27 января 2023, 09:44
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 27 января 2023, 09:43
+
0
Будьте любезны! Пожалуйста огласите главный закон Форекса. И если можно укажите автора этого закона. И буду благодарен если обоснуете именно эти уровни.
И еще. Если выведите в настройки для тестирования уровень 423.6, то скорее всего(вы удивитесь) тестер выдаст вам более интересное значение.
Я согласен, тестер вещь хорошая. Но не стоит испытывать эйфорию от тех графиков которые он вам нарисовал.
avatar

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

  • 27 января 2023, 11:09
+
0
Покупай дешевле, продавай дороже — главный закон Форекса. На уровне 423.6 как правило заканчивается пятиволновка, а бычью или медвежью свечу можно взять за первую волну, вот моё обоснование уровня 423.6.
Редактирован: 27 января 2023, 15:04
avatar

  9  droba Автор Сообщений: 239 - Droba

  • 27 января 2023, 15:02
+
0
Понятно. Главная мантра «юного» трейдера! Это всё что он уяснил из многочисленных курсов для «будущего» бумажного миллионера! На которых «Мастер» красиво показывают точки входов и выходов на прошлых графиках! Но как говорят: «Курсанты школ трейдеров не мамонты, не вымрут!». Поэтому «Мастера» и преподы этих школ всегда «будут иметь ваш кусок масла на свой кусок хлеба»!
Успехов пожелать не могу. Для успеха надо думать и принимать решения самому, а не на основе мифических волн и мифических уровней. Вы хоть что такое «норма естественной прибыли» изучите!
Но вот удачи я вам желаю! Может повезет!
avatar

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

  • 27 января 2023, 16:17
+
0
Тогда для чистоты эксперимента и успокоения совести можно добавить выставление на этих значениях на выбор стоповые ордера вместо лимитных.
Доработка в три строчки кода.
И ещё: интересно чем обусловлено выставление цены именно по этой линии. Были исследования или звёзды подсказали?
avatar

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

  • 20 января 2023, 12:57
+
0
В качестве эксперимента, стоповые добавим.
Вопрос по установке ордеров именно на этом уровне это к заказчику)
Редактирован: 20 января 2023, 13:01
avatar

  14  verta81 Сообщений: 392

  • 20 января 2023, 13:01
+
0
verta81, добрый день. Всё это я мог бы сделать и сам. Но ни стратегия не интересна и сигналы для открытия (в данном случае уровни) ничем не обоснованы.
Эти добавления были как предложения заказчику. Доработки позволят исследовать возможности советника более полно.
avatar

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

  • 20 января 2023, 14:04

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