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

Рейтинг 2153



РЕКОМЕНДУЮ



Сеточный сов - Вист

Андрей привет!
Смысл таков:
1 — Сов. должен выставить всего два встречных ордера в рынок лотом 0,01, ТП=50(регулируется в настройке),
СЛ=400(регулируется в настройке).

2 — одновременно с пунктом (1) выставить также два встречных (Lim -1) лимитных ордера лотом 0,02 на заданном
расстоянии, ТП=50(регулируется в настройке), СЛ=400(регулируется в настройке).

3 — При срабатывании ТП пункта — 1, одного из ордеров, выставить в рынок очередной лот размером лотом 0,01.
а лимитный ордер в этом направлении удаляется и на его место выставляется новый.

4 — В сове должно быть 10 отложенных лимитных ордеров (с регулируемыми значениями, чтобы можно было настроить его работу
по желанию), не одновременно а по достижении их срабатывания, т.е.- Lim-1 ждет шага срабатывания, когда он уходит в
рынок, на его место добавляется Lim-2, Т.е. у нас в рыке 2 ордера, один закрывается по профиту, на его место
ставится новый ордер, а противоположный накапливает минус, и срабатывает очередной лимитный, после того как второй
ордер войдет в рынок, выставляется очередной лимитный Lim-3 ордер с большим лотом, и так продолжается до 10
выставленного лимитного ордера.

Рынок:1
Sel — 0.01
Bay — 0.01
_____
Sel Lim-1 — 0.02
Bay Lim-1 — 0.02
_____________________
Рынок:2 сработал ТП Sel — 0.01 (на его место выставился новый, а Sel Lim-1 — 0.02 заменился на новый)
Sel — 0.01
Bay — 0.01
Bay Lim-1 — 0.02
_____
Sel Lim-1 — 0.02
Bay Lim-2 — 0.04
______________________
по такому принципу происходит до 10 Lim ордера, почему 10, не знаю, может чтобы его сделать гибче, необязательно что он когда-то сработает, но и палка стреляет раз в год а то и чаще.
  • 0
  • Просмотров: 4196
  • 9 ноября 2015, 07:04
  • ValeriyVist
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Я еще когда в прошлый раз смотрел, у меня возник вопрос: для чего городить весь этот огород, когда можно сразу выставить всю сеть ордеров? Таким образом получается в разы больше работы для кодера, а в чем смысл, подскажите пожалуйста?
avatar

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

  • 9 ноября 2015, 16:21
+
0
По ТЗ все пункты есть:




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

//------- Внешние параметры советника --------------------+
extern double Lot     = 0.1;       // Лот buy/sell ордера
extern double Lot1    = 0.2;       // Лот 1-го limit ордера
extern double Lot2    = 0.3;       // Лот 2-го limit ордера
extern double Lot3    = 0.4;       // Лот 3-го limit ордера
extern double Lot4    = 0.5;       // Лот 4-го limit ордера
extern double Lot5    = 0.6;       // Лот 5-го limit ордера
extern double Lot6    = 0.7;       // Лот 6-го limit ордера
extern double Lot7    = 0.8;       // Лот 7-го limit ордера
extern double Lot8    = 0.9;       // Лот 8-го limit ордера
extern double Lot9    = 1.0;       // Лот 9-го limit ордера
extern double Lot10   = 1.1;       // Лот 10-го limit ордера

extern int    Step1   = 100;       // Шаг 1-го limit ордера
extern int    Step2   = 200;       // Шаг 2-го limit ордера
extern int    Step3   = 300;       // Шаг 3-го limit ордера
extern int    Step4   = 400;       // Шаг 4-го limit ордера
extern int    Step5   = 500;       // Шаг 5-го limit ордера
extern int    Step6   = 600;       // Шаг 6-го limit ордера
extern int    Step7   = 700;       // Шаг 7-го limit ордера
extern int    Step8   = 800;       // Шаг 8-го limit ордера
extern int    Step9   = 900;       // Шаг 9-го limit ордера
extern int    Step10  = 1000;      // Шаг 10-го limit ордера

extern int    TP      = 100;       // Take profit buy/sell ордера
extern int    TP1     = 200;       // Take profit после 1-го limit ордера
extern int    TP2     = 300;       // Take profit после 2-го limit ордера
extern int    TP3     = 400;       // Take profit после 3-го limit ордера
extern int    TP4     = 500;       // Take profit после 4-го limit ордера
extern int    TP5     = 600;       // Take profit после 5-го limit ордера
extern int    TP6     = 700;       // Take profit после 6-го limit ордера
extern int    TP7     = 800;       // Take profit после 7-го limit ордера
extern int    TP8     = 900;       // Take profit после 8-го limit ордера
extern int    TP9     = 1000;      // Take profit после 9-го limit ордера
extern int    TP10    = 1100;      // Take profit после 10-го limit ордера

extern int    SL      = 400;       // Stop Loss для всех ордеров
extern int    Slip    = 30;        // Проскальзывание цены
extern int    Magic   = 123;       // Идентификатор ордера

int k=0;
int tp[10],step[10];
double lot[10];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   tp[0]=TP;
   tp[1]=TP1;
   tp[2]=TP2;
   tp[3]=TP3;
   tp[4]=TP4;
   tp[5]=TP5;
   tp[6]=TP6;
   tp[7]=TP7;
   tp[8]=TP8;
   tp[9]=TP9;
   tp[10]=TP10;

   step[0]=Step1;
   step[1]=Step1;
   step[2]=Step2;
   step[3]=Step3;
   step[4]=Step4;
   step[5]=Step5;
   step[6]=Step6;
   step[7]=Step7;
   step[8]=Step8;
   step[9]=Step9;
   step[10]=Step10;

   lot[0]=Lot;
   lot[1]=Lot1;
   lot[2]=Lot2;
   lot[3]=Lot3;
   lot[4]=Lot4;
   lot[5]=Lot5;
   lot[6]=Lot6;
   lot[7]=Lot7;
   lot[8]=Lot8;
   lot[9]=Lot9;
   lot[10]=Lot10;

   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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result=0;
   if(OrdersHistoryTotal()==0)
     {
      result=0;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()>0)
        {
         result=1;//tp  
        }
      if(OrderProfit()<0)
        {
         result=2;//sl  
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealType()
  {
   int type=0;
   if(OrdersHistoryTotal()==0)
     {
      type=0;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderType()==OP_BUY)
        {
         type=1;//buy  
        }
      if(OrderType()==OP_SELL)
        {
         type=2;//sell  
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelBuyLimitOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
        {
         if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
            if(OrderType()==OP_BUYLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
void DelSellLimitOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
        {
         if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
            if(OrderType()==OP_SELLLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int res=0;
   double pr=0;
   if(k>10) k=0;
//когда нет позиций
   if(CountTrades()<1)
     {
      res=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slip,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Blue);
      res=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slip,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Red);
      pr=Ask-step[k]*Point;
      res=OrderSend(Symbol(),OP_BUYLIMIT,lot[k],pr,0,pr-SL*Point,Ask+tp[k]*Point,"",Magic,0,Blue);
      pr=Bid+step[k]*Point;
      res=OrderSend(Symbol(),OP_SELLLIMIT,lot[k],pr,0,pr+SL*Point,Bid-tp[k]*Point,"",Magic,0,Red);
      k++;
      return;
     }

//когда есть позы и sell закрылся по ТП
   if(CountTrades()>0 && LastDealResult()==1 && LastDealType()==2)
     {
      DelSellLimitOrder();
      res=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slip,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Red);
      pr=Bid+step[k]*Point;
      res=OrderSend(Symbol(),OP_SELLLIMIT,lot[k],pr,0,pr+SL*Point,Bid-tp[k]*Point,"",Magic,0,Red);
      k++;
      return;
     }

//когда есть позы и buy закрылся по ТП
   if(CountTrades()>0 && LastDealResult()==1 && LastDealType()==1)
     {
      DelBuyLimitOrder();
      res=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slip,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Blue);
      pr=Ask-step[k]*Point;
      res=OrderSend(Symbol(),OP_BUYLIMIT,lot[k],pr,0,pr-SL*Point,Ask+tp[k]*Point,"",Magic,0,Blue);
      k++;
      return;
     }
   Comment("\n TP: ",tp[k],
           "\n Lot: ",lot[k],
           "\n Step: ",step[k]);
  }
//+------------------------------------------------------------------+

avatar

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

  • 9 ноября 2015, 18:56
+
0
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 12 ноября 2015, 12:33
+
0
Здравствуйте Андрей! Смысл в том что в данном сове все лимитники должны быть заложены, но в рынке их быть не должно, максимум 2 в рынке и 2 в отлоге, остальные спят и ждут своего часа, который в итоге может никогда не наступить, а ваша мысль ясна и понятна, т.е. в рынке 2 и в отдоге 20, в итоге каждый профит будет удалять как минимум 7-10 несработанных отложек, тем самым засе… ь лист истории, не вижу смысла выставлять всю сетку сразу, таких совов куча уже есть готовых.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 11 ноября 2015, 10:48
+
0
Ааа, забыл еще одну маленькую деталь, СЛ должен выставляться не для всех а отдельно для каждого взятого ордера согласно цены входа в рынок, а ТП один для всей цепочки вошедшей в рынок. Если сработал Lim -4, то ТП выставляется для всех ордеров которые уже в рынке.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 11 ноября 2015, 10:54
+
0
Вы смотрели советник выше?
avatar

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

  • 11 ноября 2015, 16:36
+
0
Здравствуй Андрей, глазом глянул что есть то что нужно по ТЗ но в терминал еще не ставил. Сегодня поставлю посмотрю.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 12 ноября 2015, 06:05
+
0
Андрей спасибо за работу, запустил на терминале, на первый взгляд вроде то что нужно, настройки работают как нужно, буду настраивать шаги, огромное спасибо.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 12 ноября 2015, 10:55
+
0
Ну вот и первые неприятности в рынке
savepic.org/7925552.jpg
Второй скрин показан на истории тут вроде как без вопросов пока
savepic.org/7918384.jpg

Вопрос по рынку: имеем настройку лим1 = 0,02, в итоге выставил 0,01, считаю уже неверным. нужно исправить.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 12 ноября 2015, 12:28
+
0
:D  сам себе ответил :D  Ну да ладно, все поймут что для Андрея было сообщение.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 11 ноября 2015, 10:55
+
0
Андрей! ситуация такая: помещаю сову на валюту, ставлю настройки, сохраняю, запускаю, в рынок выставляет все верно, в а в отложку что попало, выборка лимитников хаотичная, выключаю сову, удаляю ордера все и отложки тоже, запускаю сову, в рынок выставляет все верно а в отлогу ставит снова один из 10 вариантов лимитников, и так всегда! как будто стоит генератор случайного числа, и на момент включения совы на что выпало то и выставляет…
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 12 ноября 2015, 14:37
+
0
Дайте ваши настройки, буду смотреть на демо.
avatar

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

  • 12 ноября 2015, 16:27
+
0
а в отлогу ставит снова один из 10 вариантов лимитников, и так всегда! как будто стоит генератор случайного числа


Какой параметр у вас выставляется случайно? Сейчас проверил, лотность меняется как положено.
avatar

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

  • 12 ноября 2015, 16:47
+
0
Добрый день Анлрей! У вас на скрине в рынке 4 сэла и один бай, все как бы правильно, но в отлоге я вижу только байный ордер!!! а должен стоять еще и один сэловский, он может и не понадобится, но на случай не достижения профита должна сработать его отлога, может у вас в функции заложена такая система что при развороте он выставиться чуть раньше чем накопиться минус по сэлу??? Ставлю на демо доработку, признателен Вам за ваши труды. Удачного дня!
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 13 ноября 2015, 05:45
+
0
Исправил несколько ошибок, гоняю дальше:


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

//------- Внешние параметры советника --------------------+
extern double Lot     = 0.01;      // Лот buy/sell ордера
extern double Lot1    = 0.02;      // Лот 1-го limit ордера
extern double Lot2    = 0.04;      // Лот 2-го limit ордера
extern double Lot3    = 0.07;      // Лот 3-го limit ордера
extern double Lot4    = 0.15;      // Лот 4-го limit ордера
extern double Lot5    = 0.3;       // Лот 5-го limit ордера
extern double Lot6    = 0.6;       // Лот 6-го limit ордера
extern double Lot7    = 1.2;       // Лот 7-го limit ордера
extern double Lot8    = 2.5;       // Лот 8-го limit ордера
extern double Lot9    = 5.0;       // Лот 9-го limit ордера
extern double Lot10   = 10.0;      // Лот 10-го limit ордера

extern int    Step1   = 50;        // Шаг 1-го limit ордера
extern int    Step2   = 50;        // Шаг 2-го limit ордера
extern int    Step3   = 50;        // Шаг 3-го limit ордера
extern int    Step4   = 50;        // Шаг 4-го limit ордера
extern int    Step5   = 50;        // Шаг 5-го limit ордера
extern int    Step6   = 50;        // Шаг 6-го limit ордера
extern int    Step7   = 50;        // Шаг 7-го limit ордера
extern int    Step8   = 50;        // Шаг 8-го limit ордера
extern int    Step9   = 50;        // Шаг 9-го limit ордера
extern int    Step10  = 50;        // Шаг 10-го limit ордера

extern int    TP      = 30;        // Take profit buy/sell ордера
extern int    TP1     = 30;        // Take profit после 1-го limit ордера
extern int    TP2     = 30;        // Take profit после 2-го limit ордера
extern int    TP3     = 30;        // Take profit после 3-го limit ордера
extern int    TP4     = 30;        // Take profit после 4-го limit ордера
extern int    TP5     = 30;        // Take profit после 5-го limit ордера
extern int    TP6     = 30;        // Take profit после 6-го limit ордера
extern int    TP7     = 30;        // Take profit после 7-го limit ордера
extern int    TP8     = 30;        // Take profit после 8-го limit ордера
extern int    TP9     = 30;        // Take profit после 9-го limit ордера
extern int    TP10    = 30;        // Take profit после 10-го limit ордера

extern int    SL      = 400;       // Stop Loss для всех ордеров
extern int    Slip    = 30;        // Проскальзывание цены
extern int    Magic   = 123;       // Идентификатор ордера

int k=0;
int tp[10],step[10];
double lot[10];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   k=0;
   tp[0]=TP;
   tp[1]=TP1;
   tp[2]=TP2;
   tp[3]=TP3;
   tp[4]=TP4;
   tp[5]=TP5;
   tp[6]=TP6;
   tp[7]=TP7;
   tp[8]=TP8;
   tp[9]=TP9;
   tp[10]=TP10;

   step[0]=Step1;
   step[1]=Step1;
   step[2]=Step2;
   step[3]=Step3;
   step[4]=Step4;
   step[5]=Step5;
   step[6]=Step6;
   step[7]=Step7;
   step[8]=Step8;
   step[9]=Step9;
   step[10]=Step10;

   lot[0]=Lot;
   lot[1]=Lot1;
   lot[2]=Lot2;
   lot[3]=Lot3;
   lot[4]=Lot4;
   lot[5]=Lot5;
   lot[6]=Lot6;
   lot[7]=Lot7;
   lot[8]=Lot8;
   lot[9]=Lot9;
   lot[10]=Lot10;

   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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result=0;
   if(OrdersHistoryTotal()==0)
     {
      result=0;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            result=1;//tp  
           }
         if(OrderProfit()<0)
           {
            result=2;//sl  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealType()
  {
   int type=0;
   if(OrdersHistoryTotal()==0)
     {
      type=0;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY)
           {
            type=1;//buy  
           }
         if(OrderType()==OP_SELL)
           {
            type=2;//sell  
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelBuyLimitOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
        {
         if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
            if(OrderType()==OP_BUYLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
void DelSellLimitOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
        {
         if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
            if(OrderType()==OP_SELLLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int res=0;
   double pr=0;
   if(k>10) k=1;

//когда нет позиций
   if(CountTrades()<1)
     {
      res=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slip,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Blue);
      res=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slip,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Red);
      k++;
      pr=Ask-step[k]*Point;
      res=OrderSend(Symbol(),OP_BUYLIMIT,lot[k],pr,0,pr-SL*Point,Ask+tp[k]*Point,"",Magic,0,Blue);
      pr=Bid+step[k]*Point;
      res=OrderSend(Symbol(),OP_SELLLIMIT,lot[k],pr,0,pr+SL*Point,Bid-tp[k]*Point,"",Magic,0,Red);
      return;
     }

//когда есть позы и sell закрылся по ТП
   if(CountTrades()>0 && LastDealResult()==1 && LastDealType()==2)
     {
      k++;
      DelSellLimitOrder();
      res=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slip,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Red);
      pr=Bid+step[k]*Point;
      res=OrderSend(Symbol(),OP_SELLLIMIT,lot[k],pr,0,pr+SL*Point,pr-tp[k]*Point,"",Magic,0,Red);
      return;
     }

//когда есть позы и buy закрылся по ТП
   if(CountTrades()>0 && LastDealResult()==1 && LastDealType()==1)
     {
      k++;
      DelBuyLimitOrder();
      res=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slip,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Blue);
      pr=Ask-step[k]*Point;
      res=OrderSend(Symbol(),OP_BUYLIMIT,lot[k],pr,0,pr-SL*Point,pr+tp[k]*Point,"",Magic,0,Blue);
      return;
     }
   Comment("\n K: ",k,
           "\n TP: ",tp[k],
           "\n Lot: ",lot[k],
           "\n Step: ",step[k]);
  }
//+------------------------------------------------------------------+

avatar

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

  • 12 ноября 2015, 18:48
+
0
Постал исправленного сова, результат на скрине. В отлогу по времени выстакил не Lim1.настройки сам видишь.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 13 ноября 2015, 06:20
+
0
Сеточники требуют длительной отладки. Я как то взялся за пятнашку делать то за что другие просили 70-80, вроде простой алгоритм был, так потом заказчик с меня целый месяц не слезал! :D 
avatar

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

  • 13 ноября 2015, 06:50
+
0
Это вопрос цены?
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 13 ноября 2015, 08:49
+
0
В мой алгоритм не нужно ничего встраивать, никаких индикаторов ни чего, всего лишь чтобы он верно выставлял ордера…
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 13 ноября 2015, 08:50
+
0
У меня сейчас стоит на отладке, первую серию выставляет правильно, смотрю дальше.
avatar

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

  • 13 ноября 2015, 08:52
+
+1
В мой алгоритм не нужно ничего встраивать, никаких индикаторов ни чего, всего лишь чтобы он верно выставлял ордера…


Это вам только кажется что все так просто
avatar

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

  • 13 ноября 2015, 08:56
+
0
Еще кое что поправил:


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

//------- Внешние параметры советника --------------------+
extern double Lot     = 0.01;      // Лот buy/sell ордера
extern double Lot1    = 0.02;      // Лот 1-го limit ордера
extern double Lot2    = 0.04;      // Лот 2-го limit ордера
extern double Lot3    = 0.07;      // Лот 3-го limit ордера
extern double Lot4    = 0.15;      // Лот 4-го limit ордера
extern double Lot5    = 0.3;       // Лот 5-го limit ордера
extern double Lot6    = 0.6;       // Лот 6-го limit ордера
extern double Lot7    = 1.2;       // Лот 7-го limit ордера
extern double Lot8    = 2.5;       // Лот 8-го limit ордера
extern double Lot9    = 5.0;       // Лот 9-го limit ордера
extern double Lot10   = 10.0;      // Лот 10-го limit ордера

extern int    Step1   = 50;        // Шаг 1-го limit ордера
extern int    Step2   = 50;        // Шаг 2-го limit ордера
extern int    Step3   = 50;        // Шаг 3-го limit ордера
extern int    Step4   = 50;        // Шаг 4-го limit ордера
extern int    Step5   = 50;        // Шаг 5-го limit ордера
extern int    Step6   = 50;        // Шаг 6-го limit ордера
extern int    Step7   = 50;        // Шаг 7-го limit ордера
extern int    Step8   = 50;        // Шаг 8-го limit ордера
extern int    Step9   = 50;        // Шаг 9-го limit ордера
extern int    Step10  = 50;        // Шаг 10-го limit ордера

extern int    TP      = 30;        // Take profit buy/sell ордера
extern int    TP1     = 30;        // Take profit после 1-го limit ордера
extern int    TP2     = 30;        // Take profit после 2-го limit ордера
extern int    TP3     = 30;        // Take profit после 3-го limit ордера
extern int    TP4     = 30;        // Take profit после 4-го limit ордера
extern int    TP5     = 30;        // Take profit после 5-го limit ордера
extern int    TP6     = 30;        // Take profit после 6-го limit ордера
extern int    TP7     = 30;        // Take profit после 7-го limit ордера
extern int    TP8     = 30;        // Take profit после 8-го limit ордера
extern int    TP9     = 30;        // Take profit после 9-го limit ордера
extern int    TP10    = 30;        // Take profit после 10-го limit ордера

extern int    SL      = 400;       // Stop Loss для всех ордеров
extern int    Slip    = 30;        // Проскальзывание цены
extern int    Magic   = 123;       // Идентификатор ордера

int k=0;
int tp[10],step[10];
double lot[10];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //k=0;
   tp[0]=TP;
   tp[1]=TP1;
   tp[2]=TP2;
   tp[3]=TP3;
   tp[4]=TP4;
   tp[5]=TP5;
   tp[6]=TP6;
   tp[7]=TP7;
   tp[8]=TP8;
   tp[9]=TP9;
   tp[10]=TP10;

   step[0]=Step1;
   step[1]=Step1;
   step[2]=Step2;
   step[3]=Step3;
   step[4]=Step4;
   step[5]=Step5;
   step[6]=Step6;
   step[7]=Step7;
   step[8]=Step8;
   step[9]=Step9;
   step[10]=Step10;

   lot[0]=Lot;
   lot[1]=Lot1;
   lot[2]=Lot2;
   lot[3]=Lot3;
   lot[4]=Lot4;
   lot[5]=Lot5;
   lot[6]=Lot6;
   lot[7]=Lot7;
   lot[8]=Lot8;
   lot[9]=Lot9;
   lot[10]=Lot10;

   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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result=0;
   if(OrdersHistoryTotal()==0)
     {
      result=0;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderProfit()>0)
           {
            result=1;//tp  
           }
         if(OrderProfit()<0)
           {
            result=2;//sl  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastDealType()
  {
   int type=0;
   if(OrdersHistoryTotal()==0)
     {
      type=0;
     }
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY)
           {
            type=1;//buy  
           }
         if(OrderType()==OP_SELL)
           {
            type=2;//sell  
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelBuyLimitOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
        {
         if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
            if(OrderType()==OP_BUYLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
void DelSellLimitOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
        {
         if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
            if(OrderType()==OP_SELLLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int res=0;
   double pr=0;
   if(k>10) k=1;

//когда нет позиций
   if(CountTrades()<1)
     {
      res=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slip,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Blue);
      res=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slip,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Red);
      k++;
      pr=Ask-Step1*Point;
      res=OrderSend(Symbol(),OP_BUYLIMIT,Lot1,pr,0,pr-SL*Point,Ask+TP1*Point,"",Magic,0,Blue);
      pr=Bid+Step1*Point;
      res=OrderSend(Symbol(),OP_SELLLIMIT,Lot1,pr,0,pr+SL*Point,Bid-TP1*Point,"",Magic,0,Red);
      return;
     }

//когда есть позы и sell закрылся по ТП
   if(CountTrades()>0 && LastDealResult()==1 && LastDealType()==2)
     {
      k++;
      DelSellLimitOrder();
      res=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slip,Bid+SL*Point,Bid-TP*Point,"",Magic,0,Red);
      pr=Bid+step[k]*Point;
      res=OrderSend(Symbol(),OP_SELLLIMIT,lot[k],pr,0,pr+SL*Point,pr-tp[k]*Point,"",Magic,0,Red);
      pr=Ask-step[k]*Point;
      res=OrderSend(Symbol(),OP_BUYLIMIT,lot[k],pr,0,pr-SL*Point,pr+tp[k]*Point,"",Magic,0,Blue);      
      return;
     }

//когда есть позы и buy закрылся по ТП
   if(CountTrades()>0 && LastDealResult()==1 && LastDealType()==1)
     {
      k++;
      DelBuyLimitOrder();
      res=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slip,Ask-SL*Point,Ask+TP*Point,"",Magic,0,Blue);
      pr=Ask-step[k]*Point;
      res=OrderSend(Symbol(),OP_BUYLIMIT,lot[k],pr,0,pr-SL*Point,pr+tp[k]*Point,"",Magic,0,Blue);
      pr=Bid+step[k]*Point;
      res=OrderSend(Symbol(),OP_SELLLIMIT,lot[k],pr,0,pr+SL*Point,pr-tp[k]*Point,"",Magic,0,Red);      
      return;
     }
   Comment("\n K:    ",k,
           "\n TP:   ",tp[k],
           "\n Lot:  ",lot[k],
           "\n Step: ",step[k]);
  }
//+------------------------------------------------------------------+

avatar

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

  • 13 ноября 2015, 09:33
+
0
Ну вот и рез. Не то что хотел бы увидеть.

Во первых в рынок не выставил ни одного Села, во вторых при страбатывании байного лимитника не выставил Lim-2 с лотом 0,04! *cry* 
Тестирую на демо, в тестере не понятно что и как происходит, и в тестере чаще всего все проходит гладко и правильно.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 16 ноября 2015, 06:33
+
0
Ну вот и рез. Не то что хотел бы увидеть.

Тогда к платному.
avatar

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

  • 16 ноября 2015, 07:15
+
0
Не думал что не по силам, но все же спасибо за старания.
avatar

  8  ValeriyVist Автор Сообщений: 62

  • 16 ноября 2015, 09:55
+
0
То что можно быстро сделать, делаю.
avatar

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

  • 16 ноября 2015, 10:42
+
0
Переписал все заново. Гоняю этот вариант: www.opentraders.ru/downloads/938/


Редактирован: 19 ноября 2015, 11:44
avatar

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

  • 19 ноября 2015, 09:44

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