Ваши вопросы по языку MQL4

ArtSalt

Интересующийся
Такую дичь я в инете уже находил, у меня не работает )))))
 

ArtSalt

Интересующийся
Задача проста, чтобы советник торговал например с 13-00 до 14-00ч
 

AlexeNP

Гуру форума
ХЗ Гляну, Вроде так и не так, отпишусь, я в инете ковырнул примерно что хотел, теперь бы разобраться, не могу понять, только эти все условия перед стартом вставлять проги или где то там
проверка условий должна происходить внутри OnTick
с моей точки зрения, такое ограничение по времени таит в себе серьезный недостаток - оно не учитывает дня недели...
а вот если делать такое ограничение, то можно спокойно обойтись без всяких этих штучек
 

AlexeNP

Гуру форума
Задача проста, чтобы советник торговал например с 13-00 до 14-00ч
ну раз проста, так и решай ее просто
datetime date=TimeCurrent();
MqlDateTime struct_date;
TimeToStruct(date,struct_date);

struct_date.year; // год
struct_date.mon; // месяц
struct_date.day; // день
struct_date.hour; // час
struct_date.min; // минуты
struct_date.sec; // секунды
struct_date.day_of_week; // день недели (0-воскресенье, 1-понедельник, ... ,6-суббота)
struct_date.day_of_year; // порядковый номер в году (1 января имеет номер 0)

осталось сравнить текущее время с разрешенным и вперед)
 

AlexeyVik

Программист mql4 mql5
ну раз проста, так и решай ее просто
datetime date=TimeCurrent();
MqlDateTime struct_date;
TimeToStruct(date,struct_date);


struct_date.year; // год
struct_date.mon; // месяц
struct_date.day; // день
struct_date.hour; // час
struct_date.min; // минуты
struct_date.sec; // секунды
struct_date.day_of_week; // день недели (0-воскресенье, 1-понедельник, ... ,6-суббота)
struct_date.day_of_year; // порядковый номер в году (1 января имеет номер 0)

осталось сравнить текущее время с разрешенным и вперед)
Выделенный красным код лучше сделать так
Код:
Expand Collapse Copy
MqlDateTime struct_date;
datetime date=TimeCurrent(struct_date);
таким образом имеем и переменную и структуру.
 

ArtSalt

Интересующийся
Как я устал сливать депозит, есть у кого дельный советник, на малых ставках
 

volodymyr67

Гуру форума
Всем привет !
Подскажите пожалоста функцыю безубытка и трала .
 

AlexeNP

Гуру форума
Всем привет !
Подскажите пожалоста функцыю безубытка и трала .
функция вычисляет минимальное кол-во пунктов для перевода ордера в безубыток
Код:
Expand Collapse Copy
int BreakevenPoint(double commission,double swap,double lot,int slippage)
  {
//commission  = OrderCommission()
//swap        = OrderSwap()
//lot         = OrderLots()
//spread - спред
//slippage    - проскальзывание в пунктах
//point_value - стоимость пункта в валюте депозита
   double unconditional_loss = commission;
   if(swap<0)
     {
      unconditional_loss = unconditional_loss - swap;
     }
   int breakeven = (int)MathCeil(unconditional_loss/(lot*point_value)) + spread + slippage;
   return(breakeven);
  }
 
Последнее редактирование:

volodymyr67

Гуру форума
функция вычисляет минимальное кол-во пунктов для перевода ордера в безубыток
Код:
Expand Collapse Copy
int BreakevenPoint(double commission,double swap,double lot,int slippage)
  {
//commission  = OrderCommission()
//swap        = OrderSwap()
//lot         = OrderLots()
//spread - спред
//slippage    - проскальзывание в пунктах
//point_value - стоимость пункта в валюте депозита
   double unconditional_loss = commission;
   if(swap<0)
     {
      unconditional_loss = unconditional_loss - swap;
     }
   int breakeven = (int)MathCeil(unconditional_loss/(lot*point_value)) + spread + slippage;
   return(breakeven);
  }


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


Код:
Expand Collapse Copy
//+------------------------------------------------------------------+
//|                                                    По Свечам.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
extern double Lots       = 0.01;     // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 100;      // максимальный лот
extern double Risk       = 10;       // риск
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int Slip          = 3;        // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик
//-------------------------------------------------------------------+
extern string Comm       = "";
//-------------------------------------------------------------------+
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//-------------------------------------------------------------------+
   Comment("");
//-------------------------------------------------------------------+
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,0,0,Comm,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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=AccountBalance()*Risk/100000;

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0)
               break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }
   if(lot>MaxLot)
      lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      CloseAll();

      if(Close[1]>Open[1])
        {
         PutOrder(0,Ask);
        }
      if(Close[1]<Open[1])
        {
         PutOrder(1,Bid);
        }
      t=Time[0];
     }
   Comment("\n Lot: ",Lot());
  }
//+------------------------------------------------------------------+

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

Slava78

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


Код:
Expand Collapse Copy
//+------------------------------------------------------------------+
//|                                                    По Свечам.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
extern double Lots       = 0.01;     // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 100;      // максимальный лот
extern double Risk       = 10;       // риск
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int Slip          = 3;        // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик
//-------------------------------------------------------------------+
extern string Comm       = "";
//-------------------------------------------------------------------+
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//-------------------------------------------------------------------+
   Comment("");
//-------------------------------------------------------------------+
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,0,0,Comm,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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=AccountBalance()*Risk/100000;

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderProfit()>0)
               break;
            if(OrderProfit()<0)
              {
               lot=OrderLots()*KLot;
               break;
              }
           }
        }
     }
   if(lot>MaxLot)
      lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      CloseAll();

      if(Close[1]>Open[1])
        {
         PutOrder(0,Ask);
        }
      if(Close[1]<Open[1])
        {
         PutOrder(1,Bid);
        }
      t=Time[0];
     }
   Comment("\n Lot: ",Lot());
  }
//+------------------------------------------------------------------+

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

Вложения

AlexeNP

Гуру форума
да как бы и некуда ее в этом советнике прописывать....
на каждом тике проверяй текущую цену с ценой открытых ордеров...
если цена ушла достаточно далеко, то можешь перенести стоп-лосс ордера на кол-во пунктов, рассчитанных
BreakevenPoint
 

adamir

Активный участник
Просто идея. Сможет ли хороший программист перевести трейдинг с бэкстеста в трейдинг в реальном времени? :)
 

ArtSalt

Интересующийся
Выделенный красным код лучше сделать так
Код:
Expand Collapse Copy
MqlDateTime struct_date;
datetime date=TimeCurrent(struct_date);
таким образом имеем и переменную и структуру.
Да все нормально разобрался, есть много хитростей как установить время, СПС всем кто откликнулся
 

Kvant

Элитный участник
Может кто подскажет, как в советнике задать условие наличия соответствующего тренда от последней стрелки индикатора?

Вложения
 

Вложения

  • GBPUSDH1-1.png
    GBPUSDH1-1.png
    35,6 КБ · Просмотры: 34

MrGreen86

Гуру форума
Может кто подскажет, как в советнике задать условие наличия соответствующего тренда от последней стрелки индикатора?

Вложения
Зависит от того что вы понимаете под трендом.
Повышающиеся низины? просто движение вверх больше чем на N? свой вариант.

И вы забыли прикрепить индикатор. стрелки могут быть буферными, а могут быть объектными, подход немного отличается.
 

Kvant

Элитный участник
Зависит от того что вы понимаете под трендом.
Повышающиеся низины? просто движение вверх больше чем на N? свой вариант.

И вы забыли прикрепить индикатор. стрелки могут быть буферными, а могут быть объектными, подход немного отличается.
Тренд, в данном случае - это соответствующее (стрелке) движение, которое длится до появления противоположной.
Стрелка буферная, так что показать можно на любом стрелочном индикаторе...
 
Верх