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

Рейтинг 2073



РЕКОМЕНДУЮ




Лучшее от div15



может все просто Комментариев 7
2012-03-22 17:38:38Рейтинг 0

добавить функцию в советник

здравствуйте прошу огромной помощи добавить эту функцию в советник.
советник работает на ренко графиках.
советник приносит прибыль 1 бакс, в него надо добавить функцию
если было 2 убыточных сделки остановить работу советника на день
советник Almador v2.mq4 (51 Kb) *neo* 
функция kollichestvo lossov.mq4 (4 Kb) *rabota* 
заранее спасибо *hi* 
  • 0
  • Просмотров: 2785
  • 8 апреля 2017, 06:00
  • div15
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Это код Николя Хрущева, почему не обращаетесь к нему?
Написал свою функцию и добавил: www.opentraders.ru/downloads/1541/

avatar

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

  • 9 апреля 2017, 10:42
+
0
спасибо, но почему советник после 2-х убыточных сделок выставляет третью сделку.

1 2017.01.02 00:30 buy 1 0.48
2 2017.01.02 01:03 close 1 0.48 +прибыль
3 2017.01.02 02:30 sell 2 0.48
4 2017.01.02 03:30 close 2 0.48 -14.88 убыток
5 2017.01.02 03:30 buy 3 0.96
6 2017.01.02 04:00 close 3 0.96 -53.76 убыток
7 2017.01.02 04:00 sell 4 1.92 а это как? ее не должно быть
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 9 апреля 2017, 19:52
+
0
Что смог добавил, все остальные вопросы к автору советника. За чужой код обычно вообще не берусь.
Если опишите логику, то могу написать с нуля.
Редактирован: 9 апреля 2017, 21:38
avatar

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

  • 9 апреля 2017, 20:59
+
0
хорошо понятно.

логика следующая.
основные настройки.
lot = 0.01;
MM = 1;
LotExponent = 2;
Profit = 1;
TimeStart = в понедельник «0:05»;
TimeEnd = в пятницу «23:59»;
magic = 9238;
TakeProfit = 600; на всякий слючай
Stoploss = 300; на всякий слючай

1.
советник открывает ордера по условию.
работает на всех парах 2; 3; 4; 5; знаков после запятой.
сначало выставляет ордера а потом их модифицирует.

if(Close[1]>Open[1] && Close[2]<Open[2]) покупка
if(Close[1]<Open[1] && Close[2]>Open[2]) продажа
2.
советник закрывает ордера при противополажном сигнале, или по стоп лосу.
если сделка была убыточной или поймал стопплос, советник открывает ордер в 2 раза больше.
и расчитывает сколько пунктов надо заработать чтобы перекрыть убыточную сделку (важно) («обычно около 20 пунктов»)
3.
сделать ФИЛЬТР на сигналы, потому что кагда рынок «колбасит» только этот фильтр и помогает.
double CAN_H1 = prDiff( PERIOD_H1, 0 );
CAN_H1<0
CAN_H1>0
4.
количество убыточных сделок фильтр
Losses = 2;
отключить работу советника,
на следующий день счетчик сбрасывается и все сначало
5.
подхватывать свои ордера при разрыве связи.
6.
проверка на наличие ошибок. для реальной торговли.
7. если можно прокаментируйте код советника.

если сможете написать то огрооомное спасибо.

avatar

  15  div15 Автор Сообщений: 71 - div15

  • 10 апреля 2017, 01:34
+
0
В упрощенном виде сделал:


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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern double Profit     = 1;        // язь в рублях
extern int StopLoss      = 200;      // лось
extern int TakeProfit    = 300;      // язь
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int Losses        = 2;        // лосей в день
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lot(),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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   if(Close[1]>Open[1] && Close[2]<Open[2])
     {
      PutOrder(0,Ask);
     }

   if(Close[1]<Open[1] && Close[2]>Open[2])
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   if(Close[1]>Open[1] && Close[2]<Open[2])
     {
      CloseAll(1);
     }

   if(Close[1]<Open[1] && Close[2]>Open[2])
     {
      CloseAll(0);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   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))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int DayLosses()
  {
   int losses=0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderProfit()>0) break;
         if(OrderProfit()<0 && TimeDay(OrderCloseTime())==Day()) losses++;
        }
     }
   return(losses);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && DayLosses()<Losses && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
     {
      OpenPos();
     }
   else ClosePos();

   if(AllProfit()>=Profit) CloseAll();

   Comment("\n Profit: ",AllProfit(),
           "\n Day Losses: ",DayLosses());
  }
//+------------------------------------------------------------------+

avatar

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

  • 10 апреля 2017, 18:59
+
0
СПАСИБО. но после тестов есть проблемы.

1. советник открывает повторную сделку того же направления на одной свече, а не должен.
добавить функцию нового бара
2. доделать функцию учета ордеров, после убытка сколько надо заработать что бы выйти в плюс.
3. сделать время торговли. в понедельник в 00.05 начало, в пятницу 23.58 конец торговли.

если можно прокомментируйте код советника.

может удастся из алмабора что то полезное вытащить? и сюда вставить.

avatar

  15  div15 Автор Сообщений: 71 - div15

  • 11 апреля 2017, 07:10
+
0
1. советник открывает повторную сделку того же направления на одной свече, а не должен.
добавить функцию нового бара


Добавил, со всем остальным уже не ко мне: www.opentraders.ru/downloads/1545/


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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern double Profit     = 1;        // язь в рублях
extern int StopLoss      = 200;      // лось
extern int TakeProfit    = 300;      // язь
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 5;        // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 58;       // минута окончания торговли
extern int Losses        = 2;        // лосей в день
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lot(),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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   if(Close[1]>Open[1] && Close[2]<Open[2])
     {
      PutOrder(0,Ask);
     }

   if(Close[1]<Open[1] && Close[2]>Open[2])
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ClosePos()
  {
   if(Close[1]>Open[1] && Close[2]<Open[2])
     {
      CloseAll(1);
     }

   if(Close[1]<Open[1] && Close[2]>Open[2])
     {
      CloseAll(0);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit(int ot=-1)
  {
   double pr=0;
   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))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int DayLosses()
  {
   int losses=0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderProfit()>0) break;
         if(OrderProfit()<0 && TimeDay(OrderCloseTime())==Day()) losses++;
        }
     }
   return(losses);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1 && DayLosses()<Losses && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
     {
      if(t!=Time[0])OpenPos();
      t=Time[0];
     }
   else ClosePos();

   if(AllProfit()>=Profit) CloseAll();

   Comment("\n Profit: ",AllProfit(),
           "\n Day Losses: ",DayLosses());
  }
//+------------------------------------------------------------------+


Редактирован: 11 апреля 2017, 19:58
avatar

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

  • 11 апреля 2017, 17:59
+
0
СПАСИБО ОГРОМНОЕ*hi* 
avatar

  15  div15 Автор Сообщений: 71 - div15

  • 12 апреля 2017, 12:42

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