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

Рейтинг 2151



РЕКОМЕНДУЮ



прошу сделать гридер по ТЗ

Прошу написать советник-сеточник (пока безиндикаторный) на стоп-ордерах. Если уже создали, пожалуйста, дайте ссылку.

Настройки:
1) объем ордера в сетке (одинаковые объемы ордеров) — % от свободной маржи,
2) количество стоп-ордеров в сетке в одном направлении — N штук,
3) отступ от текущей цены до 1-х стоп-ордеров (бай-стоп и селл-стоп) — N пунктов,
4) отступ между 1-м и 2-м стоп-ордером, 2-м и 3-м, и т.д.… — N пунктов,
5) закрытие только профитных ордеров — N пунктов общего профита только по профитным ордерам (убыток по остальным ордерам не должен учитываться),
6) проскальзывание – N пунктов,
7) магик — число

Торговля:
8) ставится сетка в соответствии с условиями 1) – 4), 6), 7)
9) при наступлении условия в пункте 5)
9.1) удаляются несработавшие стоповые ордера,
9.2) закрываются профитные ордера (профит считается нетто — за минусом комиссий, свопов),
9.3) ставится новая сетка в соответствии с условиями 1) – 4), 6), 7)

Заранее благодарю!
  • +3
  • Просмотров: 2987
  • 27 сентября 2016, 10:14
  • stepmega
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Сложный не берусь.
avatar

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

  • 27 сентября 2016, 14:16
+
+1
Что то вы совсем обленились :)  Там сложно, там не знаю как, раньше такого не было.
avatar

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

  • 27 сентября 2016, 17:28
+
0
Потолок по оплачиваемым заказам.
avatar

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

  • 27 сентября 2016, 17:41
+
+1
вам делают бесплатно то, что могут.
может вы сами обленились, раз не можете взять изучить язык программирования и себе написать то, что хотите?
avatar

  17  vis Сообщений: 200 - ♫♪♫♪

  • 27 сентября 2016, 22:03
+
0
Извините, я же не со злости это написал, так просто наблюдение :) 

А сейчас, то что могут здесь сделают, но это можно и найти в сети бесплатно. А что то действительно интересное, тогда сложно *???* 
avatar

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

  • 28 сентября 2016, 05:48
+
0
а если бесплатно? )
avatar

  7  stepmega Автор Сообщений: 88

  • 27 сентября 2016, 21:57
+
0
У меня лимит по количеству оплачиваемых заказов. Платно не делаю. Сейчас набросаю облегченный вариант.
avatar

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

  • 28 сентября 2016, 06:46
+
0
Сейчас по ТЗ все есть: www.opentraders.ru/downloads/1339/

avatar

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

  • 28 сентября 2016, 07:51
+
0
не совсем то. прибыль подсчитывается в валюте, а необходимо в пунктах (пипсах).
если сможете поправить буду благодарен, если нет, то буду сам разбираться.
спасибо за сов.
дальше свои мысли попробую в нем реализовать.
Редактирован: 28 сентября 2016, 11:07
avatar

  7  stepmega Автор Сообщений: 88

  • 28 сентября 2016, 11:04
+
0
Посмотрю вечером. А какая разница что в валюте или пипсах? По сути одно и тоже.
avatar

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

  • 28 сентября 2016, 11:23
+
0
разница есть. если использовать ММ при открытии ордеров исходя из % в Risk, то при наращивании лота в сетках или его уменьшении (при просадках) закрытие профита будет на разных уровнях исходя из валюты или пипсов.
Редактирован: 28 сентября 2016, 12:12
avatar

  7  stepmega Автор Сообщений: 88

  • 28 сентября 2016, 12:12
+
0
Допустим риск 10%, открыто 2 позы на расстоянии 100 по 0.1 лота. Если указано в пипсах 20, профит 1-го 5 2-го 15 по валюте 20 долл.
Так где же разница?
avatar

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

  • 28 сентября 2016, 19:51
+
0
разница есть, так как после первой сетки объемы ордеров вновь открываемых сеток будут не одинаковыми. можно вместо пипсов сделать закрытие по приросту баланса относительно первоначального баланса (до открытия сетки).
avatar

  7  stepmega Автор Сообщений: 88

  • 28 сентября 2016, 21:25
+
0
Вот теперь понятно. Посмотрю что можно сделать.
avatar

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

  • 28 сентября 2016, 21:30
+
0
спасибо, потестирую.
avatar

  7  stepmega Автор Сообщений: 88

  • 28 сентября 2016, 10:41
+
0
Сделал профит в пунктах:




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

//--- Inputs
extern double Lot          = 0.1;      // Trade volume
extern double MinLot       = 0.1;      // Minimum lot
extern double MaxLot       = 5;        // Maximum lot
extern double Risk         = 10;       // Risk
extern int ProfitPoints    = 0;        // Profit Points
extern int StopLoss        = 0;        // Order sroploss
extern int TakeProfit      = 0;        // Order takeprofit
extern int Count           = 5;        // Orders count
extern int Expiration      = 60;       // The expiry of the order in minutes
extern int Step            = 100;      // Order step
extern int Delta           = 100;      // Distance from the price
extern int Slip            = 3;        // Slippage
extern int Magic           = 123;      // Magic number

bool PutGrid=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0,err=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,Lots(type),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*60,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Закрытие позиции по типу ордера                                  |
//+------------------------------------------------------------------+
void CloseProfit(int ot=-1)
  {
   bool cl;
   int err=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))
              {
               RefreshRates();
               if(OrderProfit()>0) cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               if(OrderProfit()>0) cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Профит прибыльных ордеров по типу ордера                         |
//+------------------------------------------------------------------+
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))
              {
               if(OrderProfit()>0) pr+=(Bid-OrderOpenPrice())/Point;
              }

            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               if(OrderProfit()>0) pr+=(OrderOpenPrice()-Ask)/Point;
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//| Лот для гридера                                                  |
//+------------------------------------------------------------------+
double Lots(int type)
  {
   double lots=Lot;
   if(Lot==0) lots=NormalizeDouble(AccountFreeMargin()*Risk/(100000*Count*2),2);
   if(lots>MaxLot)lots=MaxLot;
   if(lots<MinLot)lots=MinLot;
   return(lots);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(PutGrid)
     {
      DelOrder();
      for(int i=1; i<=Count;i++)
        {
           {
            PutOrder(4,Bid+Delta*Point+Step*Point*i);//buystop      
            PutOrder(5,Bid-Delta*Point-Step*Point*i);//sellstop
           }
        }
      PutGrid=false;
     }

   if(AllProfit()>ProfitPoints && ProfitPoints>0) 
     {
      CloseProfit();
      PutGrid=true;
     }

   Comment("\n All Profit: ",AllProfit(-1),
           "\n Buy Profit:  ",AllProfit(0),
           "\n Sell Profit: ",AllProfit(1),
           "\n Buy Positions:  ",CountOrders(0),
           "\n Sell Positions: ",CountOrders(1),
           "\n All Positions:  ",CountOrders(0)+CountOrders(1),
           "\n Account Free Margin: ",NormalizeDouble(AccountFreeMargin(),2));
  }
//+------------------------------------------------------------------+

avatar

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

  • 28 сентября 2016, 22:00
+
0
Спасибо за сова. С учетом использования консервативного ММ, мультивалютного хеджирования и закрытия всех сделок после прироста депозита на 10-20%% вполне можно, как минимум, удваивать депо за год без нервяка, как от мартышек (ИМХО).

Если не сложно, то можете сделать закрытие профитных сделок не от суммы профита, а при прохождении ценой N пунктов от первого стоп ордера сетки считая от текущей цены (цена вниз — от цены первого селл-стопа, цена вверх — от цены первого бай-стопа)? Остальные условия без изменений.
avatar

  7  stepmega Автор Сообщений: 88

  • 29 сентября 2016, 11:05
+
0
Основной косяк совы, что остаются висеть ордера на хаях и лоях, что ведет к росту просадки и сливу. Погонял я его не впечатлил и мартин не робит что то.
avatar

  13  Buff Сообщений: 401 - Артем

  • 15 октября 2016, 16:48

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