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

Рейтинг 2146



РЕКОМЕНДУЮ



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

Все здравствуйте!
Как то не очень давно я обращался в «стол заказов» с просьбой к программистам запрограммировать системку zakaz.opentraders.ru/26008.html, и даже уважаемый АМ2 создал предварительную версию

//+------------------------------------------------------------------+
//|                                                           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;
  }
//+-------------------------------------------------


Но это оказалось не совсем то что хотелось бы. К тому же, хоть идея и осталась прежней, появились новые мысли
несколько усложняющие ТЗ. Поэтому я решил написать новый топик-просьбу о создании такого автомата.
Идея прежняя: При открытии свечи устанавливается стоповый ордер на некотором расстоянии (параметр настраивается), от хая или лоу «вчерашней» свечи. Хай или лоу зависит от стандартного индикатора АО Билла Вильямса. Например — появилась новая свеча, гистограмма АО выше нуля, (вот здесь хотелось бы немножко по-другому, а именно, не важно в положительной или отрицательной он, (АО), зоне, но если зелёный то) над «вчерашним» максимумом установился бай-стоповый ордер, со стоп-лоссом под вчерашним минимумом. Предположим цена пошла в сторону этого ордера и он сработал. При открытии следующей свечи, если АО в плюсе, (вернее зелёный) снова устанавливается бай-стоп на максимуме предыдущей свечи со стоп-лоссом на её минимуме, и стоп-лосс первого модифицируется под это же значение. При открытии последующих ордеров, стоп-лоссы всех предыдущих должны модифицироваться под последнее значение.
Не сработавшие ордера должны быть удалены при закрытии свечи.
Если показания АО ниже нуля,
(красное) то всё наоборот — селл-стоп под вчерашним минимумом со стоп-лоссом над максимумом…
Тайм-фрейм — любой, валютная пара любая.
Добавлю, ордеров на графике возможно много. На открытии каждой свечи, если соблюдены все условия устанавливается один ордер. Если он не сработал до открытия следующей — повинен быть удалён. Все сработавшие ордера закрываются или по общему стоп-лоссу, или при хорошем движении цены по общему тейк-профиту.
Настраиваемые параметры должны быть такие:
1) На каком расстоянии от хая или лоу должен установиться отложенный ордер при открытии очередной свечи.
2) Не устанавливать отложенный ордер если при открытии свечи уже есть сработавший ордер на расстоянии ближе N-пунктов от предполагаемого места установки отложки. Например: Этот параметр «20». Появилась на графике очередная свеча, и по правилам над хаем или под лоу должна установиться отложка, но ближе чем 20 пунктов от этого хая (или лоу) уже есть сработавший ордер.
3) Стоп-лосс.
4) Тейк-профит. Который тоже (хотелось бы) у всех «старых» ордеров должен модифицироваться под значение «нового».
5) Тралл. (необязательно)
Возможно что то будет не понятно по ТЗ, могу нарисовать в картинках.:) 
С уважением.
З.Ы. И ещё вопрос: Нельзя ли как то «тюнинговать» АО, чтобы работал он по «Open», то есть чтобы не перерисовывался.
  • +1
  • Просмотров: 5327
  • 20 июля 2015, 08:52
  • vomisin
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

Брокер для ваших роботов, 15 лет на рынке

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

+
0
Начну сегодня делать потихоньку.
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 20 июля 2015, 13:18
+
0
Спасибо! Жду с нетерпением!:) 
avatar

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

  • 21 июля 2015, 21:25
+
0
Сейчас по показаниям АО от уровней предыдущего дня в начале суток устанавливаются отложки, в конце дня удаляются. Если все соответствует буду дальше добавлять условия.

www.opentraders.ru/downloads/813/

avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 24 июля 2015, 10:58
+
0
Правильно, вроде бы, выставляет и удаляет… Только с небольшим запозданием, как будто… Но это не сильно принципиально. Так что всё хорошо! Жду продолжения.:) 
avatar

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

  • 24 июля 2015, 21:19
+
0
В понедельник продолжу.
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 25 июля 2015, 15:28
+
0
Сейчас уже можете приблизительно протестировать систему:
www.opentraders.ru/downloads/813/

avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 27 июля 2015, 10:28
+
0
Андрей! Всё вроде бы правильно, но всё равно что то не то! Понимаете, идея такова: При появлении свечи, на основании показаний АО, устанавливается стоповый ордер, это правильно. Цена пошла в нужном направлении и ордер сработал. Имеем в активе ордер. С тейк-профитом и стоп-лоссом по условиям — это тоже правильно. Появляется очередная свеча, АО показывает продолжение движения в этом направлении, устанавливается ещё один стоповый ордер. Его тейк-профит и стоп-лосс отличаются от Т/П и С/Л первого ордера. Вот под эти то значения и должны бы переделываться Т/П и С/Л первого ордера даже если этот очередной стоповый ордер ещё не сработал. Если в настройках совы С/Л «0» то стоп-лоссы всех открытых ордеров должны модифицироваться под максимум/минимум «вчерашней» свечи. Если, например «500» — то у нового стопового ордера С/Л 500 пунктов, от предполагаемого места открытия, а у всех открытых ордеров стоп-лосс должен перенестись на этот уровень. С тейк-профитом то же самое, должен переноситься. Сейчас же, открытые ордера не модифицируются пока не откроется стоповый.
avatar

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

  • 29 июля 2015, 21:56
+
0
Дальнейшее усложнение эксперта уже вне рамок этого проекта.
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 30 июля 2015, 09:59
+
0
:D  Я сразу это понял! Не по условиям Т/З он работает! Есть в этом советнике некий «шпиён» который стоп-лоссы безо всякой логики передвигает. Вне рамок, так вне рамок.:) Спасибо и на этом!*good* 
avatar

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

  • 30 июля 2015, 19:48
+
0
Если что то простое, можете скинуть, сделаю.
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 31 июля 2015, 14:21
+
0
Хотелось бы чтоб стопы сработавших ордеров при открытии новой свечи «переписывались» над «хай» или под «лоу» только что закрывшейся свечи. Или, если в настройках стоп-лосс N-пунктов, то у всех открытых ордеров стоп-лоссы становились как у только что установленного стопового ордера. Не знаю даже, сложно ли это. *think* 
avatar

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

  • 31 июля 2015, 20:39
+
0
Надо было немного по другому делать заказ.

Заместо стоповых ордеров открывать рыночные ордера, так как стоповые ордера расставляются далеко от цены, цене надо с начало дойти до стопового ордера а потом еще взять профит, а это нереально.

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

avatar

  14  beton2011 Сообщений: 895

  • 27 июля 2015, 11:30
+
0
Сформулируйте все заново, переделаю.
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 27 июля 2015, 11:37
+
0
Можно наверно не переделывать а просто добавить в этот советник кое что.

Скажем так, по индикатору открывается только рыночный ордер, это все <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; 

Еще добавить стоповые ордера за максимум и минимум цены или индикатора прошлого дня, и передвигать стоповые ордера по движению цены, скажем цена у нас ушла на 10 пунктов вниз, за ценой передвигается байстоп ордер на 10 пунктов.

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

ТП и СЛ для рыночного и стоповых ордеров одинаковый.

Еще неплохо было бы добавить тралл для всех ордеров.

Все.


Редактирован: 27 июля 2015, 12:38
avatar

  14  beton2011 Сообщений: 895

  • 27 июля 2015, 12:32
+
0
Добавил в архив советник с рыночными ордерами:
www.opentraders.ru/downloads/813/

avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 28 июля 2015, 09:08
+
0
Спасибо, теперь я точно знаю что такого типа индикаторы не работают *pardon* 
avatar

  14  beton2011 Сообщений: 895

  • 29 июля 2015, 06:02

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