0
Закрывает по профиту в валюте или по процентам от депо. Можно прогнать в тестере: www.opentraders.ru/downloads/1496/



avatar

AM2

  • 2 марта 2017, 01:14
0
Завтра буду смотреть.
avatar

AM2

  • 1 марта 2017, 17:50
0
Посмотрю сегодня.
avatar

AM2

  • 1 марта 2017, 17:48
0
Подробнее нужно.
avatar

AM2

  • 1 марта 2017, 17:45
0
на скрине я отметил в каких местах нужен звуковой алерт

А текстом?
avatar

AM2

  • 1 марта 2017, 17:43
0
Проверил, нормально открыл:

avatar

AM2

  • 1 марта 2017, 17:39
0
Реально сделать такой. После 3-го уровня посмотрю.
avatar

AM2

  • 28 февраля 2017, 19:04
0
Сегодня займусь.
avatar

AM2

  • 28 февраля 2017, 19:02
0
Есть отключаемый тп по ма:

input int MATakeProfit = 0; // 1-тейк по МА
avatar

AM2

  • 27 февраля 2017, 18:30
+1
В образце советника не от балды. Там превышение цены над МА. Сейчас так и сделано:



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

//--- Inputs
input double  Lot         = 0.01;     // объем первого ордера
input double  MaxLot      = 100;      // максимальный лот 
input double  KLot        = 2;        // умножение лота ордеров 
input double  KStep       = 2;        // увеличение шага

input int StopLoss        = 0;        // стоплосс
input int TakeProfit      = 0;        // тейкпрофит

input int Step            = 100;      // шаг ордеров
input int Delta           = 100;      // отступ от цены
input int DeltaMA         = 400;      // отступ от MA

input int Expiration      = 55;       // истечение ордера в часах
input int Count           = 5;        // количество ордеров

input int Slip            = 3;        // проскальзывание
input int MAPeriod        = 600;      // период МА

input int MATakeProfit    = 0;        // 1-тейк по МА
input int Magic           = 123;      // магик

bool b=true,s=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=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*3600,clr);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   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 || (OrderType()>=0 && type==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Лот                                                              |
//+------------------------------------------------------------------+
double Lots(int type)
  {
   double lots=Lot;
   double MaximumLot=MarketInfo(NULL,MODE_MAXLOT);
   double MinimumLot=MarketInfo(NULL,MODE_MINLOT);

   if(Lot==0) lots=AccountEquity()/(Count*2*10000);
   lots=NormalizeDouble(lots*MathPow(KLot,CountOrders(type)),2);
   if(lots>MaximumLot) lots=MaximumLot;
   if(lots<MinimumLot) lots=MinimumLot;
   return(lots);
  }
//+------------------------------------------------------------------+
//| Шаг для гридера                                                  |
//+------------------------------------------------------------------+
double Steps(int ot)
  {
   double step=Step;
   step=NormalizeDouble(Step*MathPow(KStep,CountOrders(ot)),2);
   return(step);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MATake(double ma)
  {
   bool m;
   double tp=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)
              {
               tp=NormalizeDouble(ma,Digits);
               if(OrderTakeProfit()==0 && OrderTakeProfit()!=tp && OrderOpenPrice()<ma)
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0,Yellow);
              }

            if(OrderType()==1)
              {
               tp=NormalizeDouble(ma,Digits);
               if(OrderTakeProfit()==0 && OrderTakeProfit()!=tp && OrderOpenPrice()>ma)
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0,Yellow);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double ma=iMA(NULL,0,MAPeriod,0,0,0,0);

   if(MATakeProfit>0) MATake(ma);

   if(ma-Bid>DeltaMA*Point && b)
     {
      PutOrder(0,Ask);//buy
      PutOrder(1,Bid);//sell

      for(int i=0;i<Count;i++)
        {
           {
            PutOrder(4,Bid+Delta*Point+Steps(4)*Point*i);//buystop
            b=false;
            s=true;
           }
        }
     }

   if(Bid-ma>DeltaMA*Point && s)
     {
      PutOrder(0,Ask);//buy
      PutOrder(1,Bid);//sell

      for(int i=0;i<Count;i++)
        {
         PutOrder(5,Bid-Delta*Point-Steps(5)*Point*i);//sellstop
         s=false;
         b=true;
        }
     }
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 26 февраля 2017, 19:31
0
Добавил отключаемое выставление тейка на МА для открытых поз. И еще могу добавить какое то простое условие для закрытия удаления ордеров.

www.opentraders.ru/downloads/1493/
avatar

AM2

  • 26 февраля 2017, 12:01
0
Начнем с открытия. Сейчас советник открывает бай сел плюс соответствующая сетка если цена выше ниже МА 600. Есть шаг, отступ от цены, увеличение лота и др.




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

//--- Inputs
input double  Lot         = 0.01;     // объем первого ордера
input double  MaxLot      = 100;      // максимальный лот 
input double  KLot        = 2;        // умножение лота ордеров 
input double  KStep       = 2;        // увеличение шага

input int StopLoss        = 0;        // стоплосс
input int TakeProfit      = 0;        // тейкпрофит

input int Step            = 100;      // шаг ордеров
input int Delta           = 100;      // отступ от цены

input int Expiration      = 55;       // истечение ордера в часах
input int Count           = 5;        // количество ордеров

input int Slip            = 3;        // проскальзывание
input int MAPeriod        = 600;      // период МА
input int Magic           = 123;      // магик

bool b=true,s=true;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=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*3600,clr);
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   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 || (OrderType()>=0 && type==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| Лот                                                              |
//+------------------------------------------------------------------+
double Lots(int type)
  {
   double lots=Lot;
   double MaximumLot=MarketInfo(NULL,MODE_MAXLOT);
   double MinimumLot=MarketInfo(NULL,MODE_MINLOT);

   if(Lot==0) lots=AccountEquity()/(Count*2*10000);
   lots=NormalizeDouble(lots*MathPow(KLot,CountOrders(type)),2);
   if(lots>MaximumLot) lots=MaximumLot;
   if(lots<MinimumLot) lots=MinimumLot;
   return(lots);
  }
//+------------------------------------------------------------------+
//| Шаг для гридера                                                  |
//+------------------------------------------------------------------+
double Steps(int ot)
  {
   double step=Step;
   step=NormalizeDouble(Step*MathPow(KStep,CountOrders(ot)),2);
   return(step);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double ma=iMA(NULL,0,MAPeriod,0,0,0,0);

   if(Bid>ma && b)
     {
      PutOrder(0,Ask);//buy
      PutOrder(1,Bid);//sell
      
      for(int i=0; i<Count;i++)
        {
           {
            PutOrder(4,Bid+Delta*Point+Steps(4)*Point*i);//buystop
            b=false;
            s=true;
           }
        }

      if(Bid<ma && s)
        {
         PutOrder(0,Ask);//buy
         PutOrder(1,Bid);//sell
         
         for(int i=0; i<Count;i++)
           {
            PutOrder(5,Bid-Delta*Point-Steps(5)*Point*i);//sellstop
            s=false;
            b=true;
           }
        }
     }
  }
//+------------------------------------------------------------------+


avatar

AM2

  • 26 февраля 2017, 06:31
0
Шо всего три?!
15
avatar

AM2

  • 26 февраля 2017, 05:33
+2
Сделал выбор направления трала и открытия для надежности <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; 

extern int    TrailingType = 0;           // 0-оба 1-тралим только бай 2-только селл
extern int    OrdersType   = 0;           // 0-оба 1-только бай 2-только селл
www.opentraders.ru/downloads/1492/
avatar

AM2

  • 26 февраля 2017, 05:22
0
Набросаю завтра.
avatar

AM2

  • 25 февраля 2017, 22:12
0
А сколько за такой на платном запросили, раз так долго ждете? :D 
Могу сделать только максимально упрощенный вариант.
avatar

AM2

  • 25 февраля 2017, 05:57
+1
Тралит всю серию по типу ордера: www.opentraders.ru/downloads/1492/

avatar

AM2

  • 25 февраля 2017, 05:39
0
Как то был у меня такой глюк, тогда не удалось поправить. Посмотрим как на этот раз будет. Сейчас в праздники времени побольше.
avatar

AM2

  • 24 февраля 2017, 19:18