avva

 
Уровень 11

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


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

Рейтинг 2089



РЕКОМЕНДУЮ



Два мувинга и superprofit

superprofit.mq4 (3 Kb).Пусть В -последний сформированный бар, В* — предыдущий бар, МА1 и МА2 — два стандартных мувинга, RSP и GSP — бары, окрашеные в красный и зеленый цвета соответственно на индикаторе superprofit.*************************************************************************************************************Полагаем *************************************************************************************************************************OPENBUY = maxB, если 1) В = GSP, B* = RSP или 2)maxB >= MA1 или 3)maxB >= MA2;******************************************** OPENSELL = minB, если 1)B = RSP, B* =GSP или 2)minB <= MA1 или 3)minB <= MA2.******************************************** В работе должны быть не более трех открытых ордеров.********************************************************************* *************************************************************************************************************************Как только открывается 4-й ордер (пусть это будет ордер BUY), то ( одно из двух)либо все три ордера закрываются, если они все одноименные; либо ( в противном случае)закрывается только один SELL-ордер с большим профитом. И наоборот, как только открывается четвертым по счету ордер SELL, то либо закрываются все три ордера BUY, либо закрывается один BUY-ордер с самым большим профитом (возможно имеющим отрицательное значение).
  • +1
  • Просмотров: 4181
  • 23 октября 2015, 19:26
  • avva
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Нарисуйте пожалуйста входы на скрине, чтобы было понятнее.
avatar

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

  • 24 октября 2015, 01:03
+
0
avatar

  11  avva Автор Сообщений: 222

  • 24 октября 2015, 10:18
+
0
Добрый день Андрей!(Как-то испытываю до сих пор неловкость не указывая Ваше отчество).Для начала хочу попросить написать упрощенный вариант работы советника без закрытия всех трех одноименных ордеров, а чтобы в работе были всегда три ордера(не важно какие).Советник по очередно набирает первые три ордера, затем при открытии четвертого ордера закрывает один из ордеров другого направления с самым большим профитом.Если же были открыты три одноименные ордера, то четвертый ордер открывается только в том случае, если этот ордер имеет противоположное направление.
Редактирован: 24 октября 2015, 13:41
avatar

  11  avva Автор Сообщений: 222

  • 24 октября 2015, 11:43
+
0
Сейчас займусь.
avatar

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

  • 26 октября 2015, 12:27
+
0
Спасибо!
avatar

  11  avva Автор Сообщений: 222

  • 26 октября 2015, 12:35
+
0
Пока что встрял на том что не определяется программно момент смены цвета индикатора.
avatar

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

  • 26 октября 2015, 13:10
+
0
Вот определил. Одно условие есть.




//+------------------------------------------------------------------+
//|                                                  SuperProfit.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

//--- Inputs
extern double StopLoss     = 500;
extern double TakeProfit   = 500;
extern double Lots         = 0.1;
//----
extern int SPPeriod       = 16;
extern int Slip           = 30;
extern int Magic          = 26102015;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   int    res;
//--- get Moving Average 
   double SPGreen1=iCustom(Symbol(),0,"superprofit",SPPeriod,0,1);
   double SPARed1=iCustom(Symbol(),0,"superprofit",SPPeriod,1,1);
   double SPGreen2=iCustom(Symbol(),0,"superprofit",SPPeriod,0,2);
   double SPARed2=iCustom(Symbol(),0,"superprofit",SPPeriod,1,2);   
//--- sell conditions
   if(SPARed1<1000 && SPGreen2<1000)
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",Magic,0,Red);
      return;
     }
//--- buy conditions
   if(SPGreen1<1000 && SPARed2<1000)
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",Magic,0,Blue);
      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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double SPGreen1=iCustom(Symbol(),0,"superprofit",SPPeriod,0,1);
   double SPRed1=iCustom(Symbol(),0,"superprofit",SPPeriod,1,1);
   double SPGreen2=iCustom(Symbol(),0,"superprofit",SPPeriod,0,2);
   double SPRed2=iCustom(Symbol(),0,"superprofit",SPPeriod,1,2);   

   if(CountTrades()<1) OpenPos();

   Comment("\n SPGreen1: ",SPGreen1,
           "\n SPRed1: ",SPRed1,
           "\n SPGreen2: ",SPGreen2,
           "\n SPRed2: ",SPRed2);
//---
  }
//+------------------------------------------------------------------+

avatar

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

  • 26 октября 2015, 13:45
+
0
Урра!!! Третья часть готова.
avatar

  11  avva Автор Сообщений: 222

  • 26 октября 2015, 13:57
+
0
Сейчас добавлю входы по машкам.
avatar

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

  • 26 октября 2015, 14:02
+
0
Урра! В таком случае уже одна часть готова? Или еще надо сделать часть, связанную с выбором закрываемого ордера?
Редактирован: 26 октября 2015, 14:13
avatar

  11  avva Автор Сообщений: 222

  • 26 октября 2015, 14:09
+
0
Добавил входы по пересечению МА: www.opentraders.ru/downloads/905/

avatar

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

  • 26 октября 2015, 14:39
+
0
Добрый день Андрей! Почему-то не открываются ордера, связанные с МА1 и МА2
avatar

  11  avva Автор Сообщений: 222

  • 27 октября 2015, 12:03
+
0
Поставлю на демо, посмотрю.
avatar

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

  • 27 октября 2015, 12:09
+
0
Ок!
avatar

  11  avva Автор Сообщений: 222

  • 27 октября 2015, 12:11
+
0
У меня стоит условие пересечения свечой МА, т.е. на покупку свеча закрылась выше МА, а предыдущая ниже.
avatar

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

  • 27 октября 2015, 12:15
+
0
На скрине видно, что МА1 и МА2 лежат выше соответствующих баров и эти бары окрашены в красный цвет. А открылся лишь один ордер.
avatar

  11  avva Автор Сообщений: 222

  • 27 октября 2015, 12:34
+
0
Это значит, что когда советник бросили на график еще не было пересечения в реальном времени.
avatar

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

  • 27 октября 2015, 12:38
+
0
Буду наблюдать. Включил вновь советник и заметил какая при этом свеча формируется.
avatar

  11  avva Автор Сообщений: 222

  • 27 октября 2015, 14:56
+
0
У меня тоже пока стоит на отладке. В процессе вношу изменения. Вот последняя версия:


//+------------------------------------------------------------------+
//|                                                  SuperProfit.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

//--- Inputs
extern double Lots      = 0.1;
extern int StopLoss     = 500;
extern int TakeProfit   = 500;
extern int Count        = 3;
extern int Slip         = 30;
//----
extern int SPPeriod     = 16;
extern int MA1Period    = 50;
extern int MA2Period    = 80;
extern int Magic        = 26102015;

int t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int r=0;
   double SPGreen1=iCustom(Symbol(),0,"superprofit",SPPeriod,0,1);
   double SPRed1=iCustom(Symbol(),0,"superprofit",SPPeriod,1,1);
   double SPGreen2=iCustom(Symbol(),0,"superprofit",SPPeriod,0,2);
   double SPRed2=iCustom(Symbol(),0,"superprofit",SPPeriod,1,2);
   double ma1=iMA(NULL,0,MA1Period,0,MODE_EMA,PRICE_CLOSE,1);
   double ma2=iMA(NULL,0,MA2Period,0,MODE_EMA,PRICE_CLOSE,1);

   if(t!=Time[0] && CountTrades()<=Count)
     {
      //--- sell conditions
      if((SPRed1<1000 && SPGreen2<1000) || (Close[1]<ma1 && Close[2]>ma1) || (Close[1]<ma2 && Close[2]>ma2))
        {
         r=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",Magic,0,Red);
         t=Time[0];
         return;
        }

      //--- buy conditions
      if((SPGreen1<1000 && SPRed2<1000) || (Close[1]>ma1 && Close[2]<ma1) || (Close[1]>ma2 && Close[2]<ma2))
        {
         r=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",Magic,0,Blue);
         t=Time[0];
         return;
        }
     }

   Comment("\n SPGreen1: ",SPGreen1,
           "\n SPRed1: ",SPRed1,
           "\n SPGreen2: ",SPGreen2,
           "\n SPRed2: ",SPRed2,
           "\n Time[0]: ",Time[0],
           "\n t: ",t);
//---
  }
//+------------------------------------------------------------------+

avatar

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

  • 27 октября 2015, 14:59
+
0
Открыл 3 сделки по условию.

avatar

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

  • 27 октября 2015, 15:20
+
0
К сожалению, у меня опять вопрос: почему на скрине оба BUY открыты, хотя над тем и другим индикатор supremprofit красный? Аврал!!! Я не дописал условия.При пересечении с мувингами обязательно бары должны быть окрашены в нужный цвет!!!
Редактирован: 27 октября 2015, 15:52
avatar

  11  avva Автор Сообщений: 222

  • 27 октября 2015, 15:43
+
+1
Смотрите сколько условий! Тут уже просто запутываешься в таком многообразии *strah* 

if((SPRed1<1000 && SPGreen2<1000) || (Close[1]<ma1 && Close[2]>ma1 && (SPRed1<1000 && SPGreen2<1000)) || (Close[1]<ma2 && Close[2]>ma2 && (SPRed1<1000 && SPGreen2<1000)))
avatar

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

  • 27 октября 2015, 16:39
+
0
По количеству как было три условия на BUY и три условия на SELL, так и остались(Теперь они будут выглядить так: (BUY ) 1)B = GSP,B* = RSP;2)maxB >= MA1, B = GSP;3)maxB >= MA2, B = GSP. (SELL) 1)B = RSP, B* =GSP; 2)minB <= MA1,B = RSP;3)minB <= MA2, B = RSP. Как говорится, поспишишь — людей на смешишиь. Андрей! Добавьте пожалуйста во втором и третьем условиях окрас соответствующих баров.Без такой правки остальное становится бессмысленным. Буду очень благодарен.Пока писал — увидел, что советник пока не сортирует и не закрывает лишние ордера (их должно быть ровно три).Пока так и должно быть?
Редактирован: 27 октября 2015, 18:01
avatar

  11  avva Автор Сообщений: 222

  • 27 октября 2015, 17:39
+
0
Посмотрите вариант:




//+------------------------------------------------------------------+
//|                                                  SuperProfit.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Simple expert advisor"

//--- Inputs
extern double Lots      = 0.1;
extern int StopLoss     = 500;
extern int TakeProfit   = 500;
extern int Count        = 3;
extern int Slip         = 30;
//----
extern int SPPeriod     = 16;
extern int MA1Period    = 50;
extern int MA2Period    = 80;
extern int Magic        = 26102015;

int t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int r=0;
   double SPGreen1=iCustom(Symbol(),0,"superprofit",SPPeriod,0,1);
   double SPRed1=iCustom(Symbol(),0,"superprofit",SPPeriod,1,1);
   double SPGreen2=iCustom(Symbol(),0,"superprofit",SPPeriod,0,2);
   double SPRed2=iCustom(Symbol(),0,"superprofit",SPPeriod,1,2);
   double ma1=iMA(NULL,0,MA1Period,0,MODE_EMA,PRICE_CLOSE,1);
   double ma2=iMA(NULL,0,MA2Period,0,MODE_EMA,PRICE_CLOSE,1);

   if(t!=Time[0] && CountTrades()<=Count)
     {
      //--- sell conditions
      if((SPRed1<1000 && SPGreen2<1000) || (Close[1]<ma1 && Close[2]>ma1 && SPRed1<1000) || (Close[1]<ma2 && Close[2]>ma2 && SPRed1<1000))
        {
         r=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",Magic,0,Red);
         t=Time[0];
         return;
        }

      //--- buy conditions
      if((SPGreen1<1000 && SPRed2<1000) || (Close[1]>ma1 && Close[2]<ma1 && SPGreen1<1000) || (Close[1]>ma2 && Close[2]<ma2 && SPGreen1<1000))
        {
         r=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",Magic,0,Blue);
         t=Time[0];
         return;
        }
     }

   Comment("\n SPGreen1: ",SPGreen1,
           "\n SPRed1: ",SPRed1,
           "\n SPGreen2: ",SPGreen2,
           "\n SPRed2: ",SPRed2,
           "\n Time[0]: ",Time[0],
           "\n t: ",t);
//---
  }
//+------------------------------------------------------------------+

avatar

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

  • 27 октября 2015, 17:53
+
0
Добрый день Андрей! Какой все-таки вариант советника мне установить? А) (BUY ) 1)B = GSP,B* = RSP;2)maxB >= MA1, B = GSP;3)maxB >= MA2, B = GSP. (SELL) 1)B = RSP, B* =GSP; 2)minB <= MA1,B = RSP;3)minB <= MA2, B = RSP. или ********************************************************************* В) (BUY ) 1)B = GSP,B* = RSP;2)maxB >= MA1;3)maxB >= MA2. (SELL) 1)B = RSP, B* =GSP; 2)minB <= MA1;3)minB <= MA2.**************************** На самом деле я буду их оба проверять: и А) и В). Желательно их как-то четко различать
avatar

  11  avva Автор Сообщений: 222

  • 28 октября 2015, 07:24
+
0
На отмеченной вертикали открылся второй BUY (один уже был), а должны были открыться и второй и третий.
avatar

  11  avva Автор Сообщений: 222

  • 28 октября 2015, 12:30
+
0
Открылся третий ордер!!! Я понял причину задержки!!!
avatar

  11  avva Автор Сообщений: 222

  • 28 октября 2015, 13:10
+
0
Андрей! Все-таки хотелось бы доделать советник.Самое важное: после открытия любых трех ордеров должна начать сортировка ордеров.Четвертый ордер ( пусть это будет BUY) должен открываться только в том случае, если среди трех имеющихся открытых ордеров хотя бы один ордер имеет противоположное направление (SELL) к четвертому ордеру. Среди SELL-ордеров следует закрыть ордер с самым большом профитом. Огромная просьба Андрей к Вам — доделать советник!!!
avatar

  11  avva Автор Сообщений: 222

  • 30 октября 2015, 17:11
+
0
Чтобы реализовать этот вариант, нужно как можно подробнее описать полностью алгоритм открытия ордеров после трех.
avatar

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

  • 30 октября 2015, 17:36
+
0
Хорошо. Сейчас аккуратно опишу и чуть по позже вышлю.
avatar

  11  avva Автор Сообщений: 222

  • 30 октября 2015, 18:03
+
0
Пусть пары ордеров BUYSP и SELLSP открываются по команде индикатора Superprofit,BUY1 и SELL1 — по команде индикатора MA1, BUY2 и SELL2 — по команде индикатора МА2.Я для удобства еще раз привел эти пары(( BUY ) 1)B = GSP,B* = RSP;2)maxB >= MA1, B = GSP;3)maxB >= MA2, B = GSP. (SELL) 1)B = RSP, B* =GSP; 2)minB <= MA1,B = RSP;3)minB <= MA2, B = RSP.Теперь каждый очередной открытый ордер одновременно должен давать команду на закрытие его антипода (если таковой существует)
Редактирован: 30 октября 2015, 19:16
avatar

  11  avva Автор Сообщений: 222

  • 30 октября 2015, 19:15
+
0
Все-таки хотелось бы доделать советник.Самое важное: после открытия любых трех ордеров должна начать сортировка ордеров.Четвертый ордер ( пусть это будет BUY) должен открываться только в том случае, если среди трех имеющихся открытых ордеров хотя бы один ордер имеет противоположное направление (SELL) к четвертому ордеру. Среди SELL-ордеров следует закрыть ордер с самым большом профитом.


С сортировкой ордеров это к платному. Я как то пробовал это делать тогда у меня не получилось.
avatar

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

  • 30 октября 2015, 22:01
+
0
Добрый день Андрей! Вот поэтому я и написал сейчас самый простой вариант: если открывается BUY, то закрывается SELL и наоборот (на каждом индикаторе Superprofit, МА1 и МА2).Здесь уже не требуется проводить сортировку ордеров.Мне бы это во многом облегчило дальнейший анализ.
Редактирован: 31 октября 2015, 12:38
avatar

  11  avva Автор Сообщений: 222

  • 31 октября 2015, 08:58

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