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

Рейтинг 2073



РЕКОМЕНДУЮ



Хотелось бы потестировать системку...

Здравствуйте господа программисты!
Хотелось бы потестировать системку, но нету времени. Если это возможно, сделайте «автоматик» чтоб её в тестере погонять.
Алгоритм такой: При открытии свечи устанавливается стоповый ордер на некотором расстоянии (параметр настраивается), от хая или лоу «вчерашней» свечи. Хай или лоу зависит от стандартного индикатора АО Билла Вильямса. Например — появилась новая свеча, гистограмма АО выше нуля, над «вчерашним» максимумом установился бай-стоповый ордер, со стоп-лоссом под вчерашним минимумом. Предположим цена пошла в сторону этого ордера и он сработал. При открытии следующей свечи, если АО в плюсе, снова устанавливается бай-стоп на максимуме предыдущей свечи со стоп-лоссом на её минимуме, и стоп-лосс первого модифицируется под это же значение. При открытии последующих ордеров, стоп-лоссы всех предыдущих должны модифицироваться под последнее значение.
Не сработавшие ордера должны быть удалены при закрытии свечи.
Если показания АО ниже нуля, то всё наоборот — селл-стоп под вчерашним минимумом со стоп-лоссом над максимумом…
Тайм-фрейм — любой, валютная пара любая.
Заранее благодарен за внимание.
  • 0
  • Просмотров: 2612
  • 19 июня 2015, 19:03
  • vomisin
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
0
Я только в следующем месяце смогу написать.
avatar

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

  • 19 июня 2015, 20:09
+
0
Хорошо, я не спешу.:)  Когда напомнить?;) 
avatar

  23  vomisin Автор Сообщений: 110

  • 19 июня 2015, 20:15
+
0
Заметку себе сделал. А так вначале следующего месяца.
avatar

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

  • 19 июня 2015, 20:18
+
0
Начал делать
avatar

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

  • 1 июля 2015, 09:38
+
0
Спасибо Андрей! Хотелось бы добавить некоторые уточнения… Вернее, хотелось бы в этой системе ещё такой регулируемый параметр как тейк-профит. И чтоб тейки предыдущих ордеров, как и лоссы, становились такими же как и у последнего.
И ещё один вопрос, нельзя ли сделать чтоб АО работал по «open», то есть чтоб не перерисовывался. И, было б здорово, если б направления ордеров, то есть бай-стоп или селл-стоп, зависели от цвета АО. Свеча открылась, палочка АО зелёная, над «вчерашним» максимумом бай-стоп. Красная — под минимумом предыдущей свечки селл-стоповый ордер.
avatar

  23  vomisin Автор Сообщений: 110

  • 1 июля 2015, 18:27
+
0
Вот предварительный вариант для D1.



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

#include <stdlib.mqh>

//--- Inputs
extern int    StopLoss      = 500; //стоплосс отложенного ордера(если 0 то на предыдущий хай или лоу)
extern int    TakeProfit    = 500; //тейкпрофит  отложенного ордера
extern int    Delta         = 100; //расстояние от лоу или хая
extern double Lots          = 0.1; //лот
extern int    Slip          = 30;  //проскальзывание
extern int    Count         = 1;   //количество ордеров
extern int    Magic         = 123; //магик

/*
 При открытии свечи устанавливается стоповый ордер на некотором расстоянии (параметр настраивается),
  от хая или лоу «вчерашней» свечи. Хай или лоу зависит от стандартного индикатора АО Билла Вильямса.
   Например — появилась новая свеча, гистограмма АО выше нуля,
    над «вчерашним» максимумом установился бай-стоповый ордер,
     со стоп-лоссом под вчерашним минимумом. Предположим цена пошла в сторону этого ордера и он сработал.
      При открытии следующей свечи, если АО в плюсе, снова устанавливается бай-стоп на максимуме предыдущей свечи
       со стоп-лоссом на её минимуме, и стоп-лосс первого модифицируется под это же значение.
        При открытии последующих ордеров, стоп-лоссы всех предыдущих должны модифицироваться под последнее значение.
         Не сработавшие ордера должны быть удалены при закрытии свечи. 

Если показания АО ниже нуля, то всё наоборот — селл-стоп под вчерашним минимумом со стоп-лоссом над максимумом…
Тайм-фрейм — любой, валютная пара любая.

*/
int res,err;
double sl,tp;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   Comment("");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders()
  {
   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()>1)
               count++;
           }
        }
     }

   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double fND(double d,int n=-1)
  {
   if(n<0) return(NormalizeDouble(d, Digits));
   return(NormalizeDouble(d, n));
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<=Count && CountOrders()<=Count) 
     {
      PutOtlOrder();
     }
     
  }
//+------------------------------------------------------------------+
void PutOtlOrder()
  {
   double AO=iAO(NULL,0,1),price;
//--- sellstop 
   if(AO<0)
     {
      price=fND(iLow(Symbol(),PERIOD_D1,0)-Delta*Point);
      if(StopLoss==0) sl=fND(iHigh(Symbol(),PERIOD_D1,1));  else sl=price+StopLoss*Point;
      if(TakeProfit==0) tp=0; else tp=price-TakeProfit*Point;
      res=OrderSend(Symbol(),OP_SELLSTOP,Lots,fND(price),0,fND(sl),fND(tp),"ОРДЕР SELLSTOP",Magic,TimeCurrent()+60*60*24,Red);
      if(res<0)
        {
         err=GetLastError();
         Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА SELLSTOP: ",err,"(",ErrorDescription(err),")");
           } else {
         RefreshRates();
        }
     }
//--- buystop 
   if(AO>0)
     {
      price=fND(iHigh(Symbol(),PERIOD_D1,1)+Delta*Point);
      if(StopLoss==0) sl=fND(iLow(Symbol(),PERIOD_D1,1)); else sl=price-StopLoss*Point;
      if(TakeProfit==0) tp=0; else tp=price+TakeProfit*Point;
      res=OrderSend(Symbol(),OP_BUYSTOP,Lots,fND(price),Slip,fND(sl),fND(tp),"ОРДЕР BUYSTOP",Magic,TimeCurrent()+60*60*24,Blue);
      if(res<0)
        {
         err=GetLastError();
         Print("ОШИБКА ВЫСТАВЛЕНИЯ ОРДЕРА BUYSTOP: ",err,"(",ErrorDescription(err),")");
           } else {
         RefreshRates();
        }
     }

   return;
  }
//+------------------------------------------------------------------+
avatar

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

  • 1 июля 2015, 20:10
+
0
Не работает( 
avatar

  23  vomisin Автор Сообщений: 110

  • 6 июля 2015, 09:38
+
0
Опишите что не работает. Нужно смотреть логи журналы.
avatar

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

  • 6 июля 2015, 11:02

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