levs01
Алексей

 
Уровень 12

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


Лучшее от levs01



Price Action на MQL Комментариев 8
2014-11-08 13:55:45Рейтинг 0

Тестим Совенок Duplet.Setka Levs Комментариев 18
2014-10-31 00:40:21Рейтинг 0

Мысли про Ва Банк Комментариев 1
2015-05-01 01:08:25Рейтинг 0

Price Action на MQL

Добрый день, давно хотел написать советник по стратегии основанной на сетапах Price Action.
В этом блоге попробую описать некоторые сетапы на языке MQL. Один сетап — одна функция, которую можно встроить в советник и вызывать по необходимости.
1. Сетап «Додж» — Когда цена открытия = цене закрытия, либо наоборот.
Функция на языке MQL будет выглядеть примерно так:
//+------------------------Доджи------------------------------------------+
bool Dodge()
{
  bool result;
  if(Open[1]==Close[1])
  {
    if(High[1]>=Open[1] && Low[1]<=Close[1])
    result=true;
  }
  else result=false;
  return(result);
}

2 Сетап «Пинбар» — Бар у которого цена закрытия близко к цене открытия и одна из теней в два и более раз превышает тело свечи, при этом тело свечи пинбара находится в ценовом диапазоне предыдущей свечи.

Попробую описать паттерн на MQL в две функции: Pinbar_Hight() — когда большая тень вверх и Pinbar_Low() — когда большая тень вниз
//+--------------------Пинбар вверх--------------------------------------------+
bool Pinbar_Hight()
{
  int Pin,hvost;
  bool Pinbar;
  if(Open[1]<Close[1])
  {
    telo=Close[1]-Open[1]/Point;
    Pin=High[1]-Close[1]/Point;
    hvost=Open[1]-Low[1]/Point;
    if(Pin>telo*2 && hvost<Pin/2)
    {
     if(Low[2]<Open[1] && High[2]>Close[1])
       Pinbar=true;
    }
    else Pinbar=false;  
  }
  if(Open[1]>Close[1])
  {
   telo=Open[1]-Close[1]/Point;
   Pin=High[1]-Open[1]/Point;
   hvost=Close[1]-Low[1]/Point;
    if(Pin>telo*2 && hvost<Pin/2) 
    {
      if(High[2]>Open[1] && Low[2]<Close[1])
      Pinbar=true;
    }
    else Pinbar=false;  
  } 
  return(Pinbar);
}
//+--------------------Пинбар вниз--------------------------------------------+
bool Pinbar_Low()
{
  int Pin,hvost;
  bool Pinbar;
  if(Open[1]<Close[1])
  {
    telo=Close[1]-Open[1]/Point;
    Pin=Open[1]-Low[1]/Point;
    hvost=High[1]-Close[1]/Point;
    if(Pin>telo*2 && hvost<Pin/2) 
    {
       if(High[2]>Close[1] && Low[2]<Open[1])
       Pinbar=true;
    }
    else Pinbar=false;  
  }
  if(Open[1]>Close[1])
  {
   telo=Open[1]-Close[1]/Point;
   Pin=Close[1]-Low[1]/Point;
   hvost=High[1]-Open[1]/Point;
    if(Pin>telo*2 && hvost<Pin/2) 
    {
     if(High[2]>Open[1] && Low[2]<Close[1])
      Pinbar=true;
    }
    else Pinbar=false;  
  } 
  return(Pinbar);
}
  • +6
  • Просмотров: 1071726
  • 8 ноября 2014, 13:55
  • levs01
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

  Предыдущая запись в моем блоге
Тестим Совенок Duplet.Setka Levs
Следующая запись в моем блоге  
Мысли про Ва Банк
31 октября 2014
01 мая 2015

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

+
+3
будьте внимательны, одна и таже формула подходит к различным типам свечей. делал подобный скрипт.

avatar

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

  • 8 ноября 2014, 21:55
+
+4
Продолжим описание сетапов Price Action.
3 Внутренний бар. Бар, ценовой диапазон которого, от хая до лоя, не выходит за ценовой диапазон пред идущей (материнской) свечи.
написал интовую функцию которая возвращает либо бычий паттерн либо медвежий, если паттерн не состоялся возвращает 0
<code>//+---------------------Внутрений бар------------------------------------+
int Inside_Bar()
{
  int In_bar=0; // Переменная в которую будем записывать тип внутреннего бара 
  // присвоим 1 если паттерн бычий, присвоим 2 если паттерн медвежий.
  // вернем 0 если паттерн не состоялся.
   
   // Проверим направление материнской свечи
   int mat_buch=0; // Бычая свеча
   int mat_med=0;  // Медвежья свеча
     if (iOpen(Symbol(),0,2)>iClose(Symbol(),0,2))   mat_med++;
     if (iOpen(Symbol(),0,2)<iClose(Symbol(),0,2))   mat_buch++; 
   // Проверяем направление внутреннего бара
   int in_buch=0; // Бычий бар
   int in_med =0; // Медвежий бар
     if (iOpen(Symbol(),0,1)>iClose(Symbol(),0,1))   in_med++;
     if (iOpen(Symbol(),0,1)<iClose(Symbol(),0,1))   in_buch++; 
  // Бычий сетап : Материнская свеча - медвежья, внутренний бар - бычий
     if(mat_med>0 && in_buch>0)    
     {
  // проверим ценовой дипазон внутреннего бара, что б он не выходил за ценовой диапазон 
  // материнской свечи и присвоим переменной In_bar значение 1
     if(iHigh(Symbol(),0,1)<=iHigh(Symbol(),0,2) && iLow(Symbol(),0,1)>=iLow(Symbol(),0,2))In_bar=1;     
     }
  // Медвежий сетап : Материнская свеча - Бычья, внутренний бар - Медвежий
     if(mat_buch>0 && in_med>0)    
     {
  // проверим ценовой дипазон внутреннего бара, что б он не выходил за ценовой диапазон 
  // материнской свечи и присвоим переменной In_bar значение 2
     if(iHigh(Symbol(),0,1)<=iHigh(Symbol(),0,2) && iLow(Symbol(),0,1)>=iLow(Symbol(),0,2))In_bar=2;     
     }
 return(In_bar);     
  }</code>

Редактирован: 9 ноября 2014, 00:14
avatar

  12  levs01 Автор Сообщений: 37 - Алексей

  • 9 ноября 2014, 00:03
+
+3
Очередной паттерн — Модель поглащения: сигнальная свеча полностью поглощает пред идущую.
По аналогии с внутренним баром написал интовую функцию
<code>
//+-----------Модель поглащения---------------------------------------------+
int Poglashenie()
{
  int Pogl=0;/* Переменная в которую будем записывать тип модели поглащения 
   присвоим 1 если паттерн бычий, присвоим 2 если паттерн медвежий.
   вернем 0 если паттерн не состоялся.*/
  
   // Проверим направление материнской свечи
   int mat_buch=0; // Бычая свеча
   int mat_med=0;  // Медвежья свеча
     if (iOpen(Symbol(),0,2)>iClose(Symbol(),0,2))   mat_med++;
     if (iOpen(Symbol(),0,2)<iClose(Symbol(),0,2))   mat_buch++; 
   // Проверяем направление сигнальной свечи
   int in_buch=0; // Бычий бар
   int in_med =0; // Медвежий бар
     if (iOpen(Symbol(),0,1)>iClose(Symbol(),0,1))   in_med++;
     if (iOpen(Symbol(),0,1)<iClose(Symbol(),0,1))   in_buch++; 
  // Бычий сетап : Материнская свеча - меньше сигнальной, сигнальная свеча - бычья
     if(in_buch>0)  
     {
       /* Проверяем ценовой диапозон материнской свечи, чтоб он не выходил
        за ценовой диапазон сигнальной свечи и присваеваем переменной 
        Pogl значение 1*/
        if(iHigh(Symbol(),0,2)<iHigh(Symbol(),0,1) && iLow(Symbol(),0,2)>iLow(Symbol(),0,1))Pogl=1;     
     }
 // Медвежий сетап : Материнская свеча - меньше сигнальной, сигнальная свеча - Медвежья
     if(in_med>0)    
     {
  /* проверим ценовой дипазон материнской свечи, что б он не выходил за ценовой диапазон 
     сигнальной свечи и присвоим переменной Pogl значение 2*/
     if(iHigh(Symbol(),0,2)<iHigh(Symbol(),0,1) && iLow(Symbol(),0,2)>iLow(Symbol(),0,1))Pogl=2;     
     }  
return(Pogl);
}
</code>

Ну и вот чего показал тестер с этим паттерном:

тестил EURUSD D1 очень быстро, впрочем как и писал сову.

Вот советник, заработал на D1. В любом случае нужны подтверждения на вход (индикаторы, лини поддержки и сопративления).

//+------------------------------------------------------------------+
//|                                     Price_Action_Poglascenie.mq4 |
//|                                                           Lapot' |
//|                                               goja2008@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Lapot'"
#property link      "goja2008@yandex.ru"
#property version   "1.00"
//#include  "Price Action.mq4"  // Добовление функций из личной библиотеки 


//--- input parameters
extern double   LOT         =0.01;  // Размер лота
extern int      Step        =5;     // шаг отступа от экстремума для отложки и стоплоса
extern int      MagicNumber = 567888;  // Магик
double pb/*цена в бай*/,ps/*цена в сел*/, tp,sl,svecha,ticet;
datetime time;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(Digits==5 || Digits==3) Step  *=10; // увеличиваем шаг на 5-ти знаке
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
        
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
     if (time==Time[0]) return;
     else time=Time[0];
     if(Poglashenie()>0)DeleteOrder(MagicNumber);
     {
    if(Count_Buy()==0 && Count_Sell()==0)// Проверка рыночных ордеров
    {
      if(Poglashenie()==1) // Проверка Бычьего сетапа полащения
      {
        pb=PriceBuy(Step);   // Определяем цену отложного ордера
        //Ставим Стоповый Бай
        ticet=OrderSend(Symbol(),OP_BUYSTOP,LOT,pb,5,0,0,"поглащение Быки",MagicNumber,0);// Print("OK");
       if (OrderSelect(ticet,SELECT_BY_TICKET,MODE_TRADES )) 
       {
          // Получаем цену для стоплоса
          sl=NormalizeDouble(iLow(Symbol(),0,1)-Step*Point,Digits);
          // считаем профит
          svecha=NormalizeDouble((iHigh(Symbol(),0,1)-sl)/Point,Digits);// размер от хая сигнальной
                                                                          // свечи до стоплоса в пунктах
          tp= NormalizeDouble(pb+svecha*Point,Digits);
          // Ставим ордеру Стоп и профит
          if(OrderModify(ticet,OrderOpenPrice(),sl,tp,0)) Print("ордер изменен");
        }
      }
      if(Poglashenie()==2) // Проверка Медвежьего сетапа полащения
      {
        ps=PriceSell(Step);   // Определяем цену отложного ордера
        //Ставим Стоповый Сел
        ticet=OrderSend(Symbol(),OP_SELLSTOP,LOT,ps,5,0,0,"поглащение Медведи",MagicNumber,0);// Print("OK");
       if (OrderSelect(ticet,SELECT_BY_TICKET,MODE_TRADES )) 
       {
          // Получаем цену для стоплоса
          sl=NormalizeDouble(iHigh(Symbol(),0,1)+Step*Point,Digits);
          // считаем профит
          svecha=NormalizeDouble((sl-iLow(Symbol(),0,1))/Point,Digits);// размер от стоплоса до
                                                                          //до лоя сигнальной свечи в пунктах
          tp= NormalizeDouble(OrderOpenPrice()-svecha*Point,Digits);                                                               
          // Ставим орднру Стоп и профит
          if(OrderModify(ticet,OrderOpenPrice(),sl,tp,0)) Print("ордер изменен");
        }
      }
    }   
  }
  }
//+------------------------------------------------------------------+
void DeleteOrder(int Mag)
{
  
   for (int i = 0; i < OrdersTotal(); i++)
   {
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
        if (Symbol()==OrderSymbol() && OrderMagicNumber()==Mag)
         {
           if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
            if(OrderDelete(OrderTicket())) Print("Delete");
         }
      }
   }
}
//+------------------------------------------------------------------+
 int Count_Buy()
 {
   int count =0;
   int Total = OrdersTotal();
   for(int i=0;i<Total; i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
        if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
        { 
           if(OrderType()!=OP_SELL || OrderType()!=OP_SELLSTOP)
          {
          if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
          count++;
          }
        } 
      }
    }
   return(count);   
 }
//+--------------------Количество Sell ордеров----------------------------------------------+
 int Count_Sell()
 {
   int count =0;
   int Total = OrdersTotal();
   for(int i=0;i<Total; i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
        if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
        { 
         if (OrderType()!=OP_BUY || OrderType()!=OP_BUYSTOP)
          {
          if (OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
          count++;
          }
        } 
      }
    }
   return(count);   
 }
 double PriceBuy(int Otstup)
{
   double price = NormalizeDouble(High[1]+Otstup*Point,Digits);
  return(price);
}
//+------------------------------------------------------------------+
double PriceSell(int Otstup)
{
 double  price = NormalizeDouble(Low[1]-Otstup*Point,Digits);
  return(price);
}
int Poglashenie()
{
  int Pogl=0;/* Переменная в которую будем записывать тип модели поглащения 
   присвоим 1 если паттерн бычий, присвоим 2 если паттерн медвежий.
   вернем 0 если паттерн не состоялся.*/
  
   // Проверим направление материнской свечи
   int mat_buch=0; // Бычая свеча
   int mat_med=0;  // Медвежья свеча
     if (iOpen(Symbol(),0,2)>iClose(Symbol(),0,2))   mat_med++;
     if (iOpen(Symbol(),0,2)<iClose(Symbol(),0,2))   mat_buch++; 
   // Проверяем направление сигнальной свечи
   int in_buch=0; // Бычий бар
   int in_med =0; // Медвежий бар
     if (iOpen(Symbol(),0,1)>iClose(Symbol(),0,1))   in_med++;
     if (iOpen(Symbol(),0,1)<iClose(Symbol(),0,1))   in_buch++; 
  // Бычий сетап : Материнская свеча - меньше сигнальной, сигнальная свеча - бычья
     if(in_buch>0)  
     {
       /* Проверяем ценовой диапозон материнской свечи, чтоб он не выходил
        за ценовой диапазон сигнальной свечи и присваеваем переменной 
        Pogl значение 1*/
        if(iHigh(Symbol(),0,2)<iHigh(Symbol(),0,1) && iLow(Symbol(),0,2)>iLow(Symbol(),0,1))Pogl=1;     
     }
 // Медвежий сетап : Материнская свеча - меньше сигнальной, сигнальная свеча - Медвежья
     if(in_med>0)    
     {
  /* проверим ценовой дипазон материнской свечи, что б он не выходил за ценовой диапазон 
     сигнальной свечи и присвоим переменной Pogl значение 2*/
     if(iHigh(Symbol(),0,2)<iHigh(Symbol(),0,1) && iLow(Symbol(),0,2)>iLow(Symbol(),0,1))Pogl=2;     
     }  
return(Pogl);
}

Редактирован: 13 ноября 2014, 00:26
avatar

  12  levs01 Автор Сообщений: 37 - Алексей

  • 10 ноября 2014, 00:26
+
+3
Здорово придумали! *good* 
avatar

  4  hinin Сообщений: 88

  • 10 ноября 2014, 00:45
+
+2
Редкий, но эффективный паттерн ГЭП.
ГЭП — разрыв цены между открытием текущей свечи и закрытием пред идущей.
По правилам паттерна ГЭПом можно считать разрыв цены от 20 пунктов и более.
Функция на MQL простенькая.

//+---------------------- GAP -------------------------------------------------------+
int GAP()
{
 int gap=0;// переменная в которую запишем значение ГЭПа ; 1- разрыв цены вверх;
                                                         //2- разрыв цены вниз
                                                         //0- ГЭП не подтвержден
  int shag; // запишем сюда разрыв цены в пунктах между ценой открытия 
            // текущей свечи и ценой закрытия пред идущей свечи
  // прроверяем разрыв вверх
  if(iOpen(Symbol(),0,0)>iClose(Symbol(),0,1))
  {
  // вычисляем и записываем переменную shag
  shag=NormalizeDouble((iOpen(Symbol(),0,0)-iClose(Symbol(),0,1))/Point,Digits); 
  // Проверяем разрыв по правилу паттерна
  if(shag>=20)gap=1;
  } 
  // прверяем разрыв вниз                                                                
  if(iOpen(Symbol(),0,0)<iClose(Symbol(),0,1))
  {
  // вычисляем и записываем переменную shag
  shag=NormalizeDouble((iClose(Symbol(),0,1)-iOpen(Symbol(),0,0))/Point,Digits); 
  // Проверяем разрыв по правилу паттерна
  if(shag>=20)gap=2;
  }                                                                 
return(gap);
}

Чуть позже выложу код советника.
avatar

  12  levs01 Автор Сообщений: 37 - Алексей

  • 15 ноября 2014, 14:48
+
+2
Советник к паттерну ГЭП

//+------------------------------------------------------------------+
//|                                                          GAP.mq4 |
//|                                                           Lapot' |
//|                                               goja2008@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Lapot'"
#property link      "goja2008@yandex.ru"
#property version   "1.00"
extern double  LOT  =1; // размер торгуемого лота
extern int     step   = 3; 
extern int  MagicNumber  =66778;// Магик ордеров советника
  int rast,popolam,stop,ticet;double TP,SL;
datetime time;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    Modify();
    if(time==Time[0]) return;
    else time=Time[0];
    Comment("");
    int g = GAP();
    if(Count_Buy()==0 && Count_Sell()==0)
    {
      if(GAP()==1)
      {
       TP=NormalizeDouble((iHigh(Symbol(),0,2)+step*Point),Digits);
       rast=NormalizeDouble((iOpen(Symbol(),0,0)-TP*Point),Digits);
       popolam=rast/2;
       rast=rast+popolam;
       stop=rast*0.5;
       SL=NormalizeDouble((iOpen(Symbol(),0,0)+stop*Point),Digits);
       Comment("тейкпрофит="+TP," стоплос="+SL,"  растояние="+rast);
       ticet=OrderSend(Symbol(),OP_SELL,LOT,Bid,5,0,0,"GAP_Sell",MagicNumber,0,Red);
      /* if (OrderSelect(ticet,SELECT_BY_TICKET,MODE_TRADES )) 
       {
         if(OrderModify(ticet,OrderOpenPrice(),SL,TP,0,0)) Print("ордер изменен");
       }*/
      }
      if(GAP()==2)
      {
       TP=NormalizeDouble((iLow(Symbol(),0,2)-step*Point),Digits);
       rast=NormalizeDouble(TP-(iOpen(Symbol(),0,0))*Point,Digits);
       popolam=rast/2;
       rast=rast+popolam;
       stop=rast*0.5;
       SL=NormalizeDouble((iOpen(Symbol(),0,0)-stop*Point),Digits);
       Comment("тейкпрофит="+TP," стоплос="+SL);
       ticet=OrderSend(Symbol(),OP_BUY,LOT,Ask,5,0,0,"GAP_Byu",MagicNumber,0,Blue);
      /* if (OrderSelect(ticet,SELECT_BY_TICKET,MODE_TRADES )) 
       {
         if(OrderModify(ticet,OrderOpenPrice(),SL,TP,0,0)) Print("ордер изменен");
       }*/
      }
    }
  }
//+------------------------------------------------------------------+
//+---------------------- GAP -------------------------------------------------------+
int GAP()
{
 int gap=0;// переменная в которую запишем значение ГЭПа ; 1- разрыв цены вверх;
                                                         //2- разрыв цены вниз
                                                         //0- ГЭП не подтвержден
  int shag; // запишем сюда разрыв цены в пунктах между ценой открытия 
            // текущей свечи и ценой закрытия пред идущей свечи
  // прроверяем разрыв вверх
  if(iOpen(Symbol(),0,1)>iClose(Symbol(),0,2))
  {
  // вычисляем и записываем переменную shag
  shag=NormalizeDouble((iOpen(Symbol(),0,1)-iClose(Symbol(),0,2))/Point,Digits); 
  // Проверяем разрыв по правилу паттерна
  if(shag>=20)gap=1;
  } 
  // прверяем разрыв вниз                                                                
  if(iOpen(Symbol(),0,1)<iClose(Symbol(),0,2))
  {
  // вычисляем и записываем переменную shag
  shag=NormalizeDouble((iClose(Symbol(),0,2)-iOpen(Symbol(),0,1))/Point,Digits); 
  // Проверяем разрыв по правилу паттерна
  if(shag>=20)gap=2;
  }                                                                 
return(gap);
}
//+-----------------Количество Byu ордеров------------------------------------------+
 int Count_Buy()
 {
   int count =0;
   int Total = OrdersTotal();
   for(int i=0;i<Total; i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
        if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
        { 
           if(OrderType()!=OP_SELL || OrderType()!=OP_SELLSTOP)
          {
          if (OrderType()==OP_BUY || OrderType()==OP_BUYSTOP)
          count++;
          }
        } 
      }
    }
   return(count);   
 }
//+--------------------Количество Sell ордеров----------------------------------------------+
 int Count_Sell()
 {
   int count =0;
   int Total = OrdersTotal();
   for(int i=0;i<Total; i++)
    {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
        if(OrderSymbol()==Symbol() && OrderMagicNumber()== MagicNumber)
        { 
         if (OrderType()!=OP_BUY || OrderType()!=OP_BUYSTOP)
          {
          if (OrderType()==OP_SELL || OrderType()==OP_SELLSTOP)
          count++;
          }
        } 
      }
    }
   return(count);   
 }
 //+--------------------------Модификация ордеров------------------------------------------------+
 void Modify()
{
   for (int i=0; i<OrdersTotal(); i++) 
    {
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
           if (OrderType()==OP_BUY)
           { 
            if(OrderModify(ticet,OrderOpenPrice(),SL,TP,0,0)) Print("ордер изменен");
           }
           if (OrderType()==OP_SELL)
           { 
            if(OrderModify(ticet,OrderOpenPrice(),SL,TP,0,0)) Print("ордер изменен");
           }
         }
       }
     }        
}

Результаты не фонтан, в умелых руках может и что-нибудь получится.
Желаю удачи!!!
avatar

  12  levs01 Автор Сообщений: 37 - Алексей

  • 16 ноября 2014, 00:40
+
+1
Мало что меняет, но думаю можно добавить условие перед открытием ордеров:
На продажу добавляем

if(iOpen(Symbol(),0,0)<=TP) return;

на покупку

if(iOpen(Symbol(),0,0)>=TP) return;

Хуже этому советнику уже не будет, за-то избавим его от ошибок модификации ордеров.
avatar

  12  levs01 Автор Сообщений: 37 - Алексей

  • 16 ноября 2014, 02:32
+
0
А что в кучу все не собрали? ;) 
avatar

  0  Strannik Сообщений: 685 - Алексей (деактивирован)

  • 3 августа 2015, 09:49

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