0
Это можно сделать, если заказчик захочет.
avatar

verta81

  • 12 февраля 2023, 13:03
0
Вечер ушёл на написание.
avatar

verta81

  • 12 февраля 2023, 13:01
0
Если Андрей не против, напишу.
avatar

verta81

  • 9 февраля 2023, 19:00
0
Только короткие позиции? В лонг не сделок.
avatar

verta81

  • 27 января 2023, 08:51
0
В качестве эксперимента, стоповые добавим.
Вопрос по установке ордеров именно на этом уровне это к заказчику)
avatar

verta81

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

verta81

  • 20 января 2023, 08:58
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

verta81

  • 20 января 2023, 08:57
0
Если Андрей не против, попробую написать.
avatar

verta81

  • 19 января 2023, 15:32
0
Если цена на графике ближе к LOW 120 последних свечей и RSI выше 55 то продажа
Если цена на грифике ближе к HIGH 120 последних свечей и RSI ниже 55 то покупка.
avatar

verta81

  • 17 января 2023, 19:01
0
double mi=(hi-lo)/2
так вы найдете разность экстремумов, и close всегда будет ближе к Low.
ВОТ В ЭТОЙ СТРОКЕ if(close[i]>mi && rsi<RSILevel) все верно, но вы можете поэкспериментировать.
avatar

verta81

  • 17 января 2023, 17:44
0
Файл пустой, 0Кб
avatar

verta81

  • 6 января 2023, 22:16
+1
перезалил:
www.opentraders.ru/downloads/3482/
Угол привязки-верхний левый, панельку можно таскать по графику.
Кнопки сворачивания и разворачивания — это графические метки(картинки с расширением .bmp)
Можете изменить их в любом редакторе и перезалить, адреса и имена указаны в этих строках:

#define TurnOf "\\Include\\Controls\\res\\Turn.bmp" //13x13
#define TurnOn "\\Include\\Controls\\res\\Restore.bmp" //13x13
avatar

verta81

  • 2 января 2023, 16:38
+1
Добавьте строку в функцию OnDeinit():
ObjectDelete(0,"Turn");

avatar

verta81

  • 1 января 2023, 23:45
+1
посмотрим
avatar

verta81

  • 1 января 2023, 23:39
0
Жмакаем кнопку.
Горизонтальная линия — это уровень, от него и работаем.
Линию можно перетаскивать.
www.opentraders.ru/downloads/3483/
avatar

verta81

  • 29 декабря 2022, 23:44
0
Могу попробовать, если Андрей не против
avatar

verta81

  • 29 декабря 2022, 22:15
+1
Вариант со сворачиванием.
www.opentraders.ru/downloads/3482/
avatar

verta81

  • 28 декабря 2022, 23:50
+1
Логично! *good* 
avatar

verta81

  • 1 декабря 2022, 19:34