0
На среду.
avatar

AM2

  • 18 ноября 2017, 11:14
0
Гляну после выходных.
avatar

AM2

  • 18 ноября 2017, 11:09
0
Скинете в другом топике индикатор и посмотрю что там. Но на следующий месяц будет.
avatar

AM2

  • 18 ноября 2017, 10:11
0
После выходных посмотрю.
avatar

AM2

  • 18 ноября 2017, 10:08
0
Поправил индикатор. Можно менять ТФ. Для одного периода сделал. А для нескольких не сделаешь т.к. метки с которых считывается значение имеют одинаковое имя.
www.opentraders.ru/downloads/1726/

avatar

AM2

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

AM2

  • 17 ноября 2017, 18:31
0
Обратитесь к человеку который вам поможет составить грамотное ТЗ.
avatar

AM2

  • 16 ноября 2017, 22:33
0
avatar

AM2

  • 16 ноября 2017, 22:29
0
Уникальный алгоритм. П.2. Сходу не решил. Далее только если будет свободное время.

То что набросал:


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

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 50;       // лось
extern int TakeProfit    = 70;       // язь
extern int StopLimit     = 0;        // 0-stop 1-limit
extern int Last          = 0;        // 0-также 1-обрат
extern int Delta         = 100;      // дельта
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

int last=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderProfit()<0) break;
         if(OrderProfit()>0)
           {
            lot=OrderLots()*KLot;
            break;
           }
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastType()
  {
   int tp=-1;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) tp=OrderType();
            break;
           }
        }
     }
   return(tp);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<1)
     {
      if(((LastType()==4 || LastType()==5) && Last==0) || ((LastType()==2 || LastType()==3) && Last==1))
        {
         if(CountOrders(4)<1) PutOrder(4,Bid+Delta*Point);
         if(CountOrders(5)<1) PutOrder(5,Bid-Delta*Point);
        }

      if(((LastType()==2 || LastType()==3) && Last==0) || ((LastType()==4 || LastType()==5) && Last==1))
        {
         if(CountOrders(2)<1) PutOrder(2,Bid-Delta*Point);
         if(CountOrders(3)<1) PutOrder(3,Bid+Delta*Point);
        }

      if(StopLimit==0 && LastType()==-1)
        {
         if(CountOrders(4)<1) PutOrder(4,Bid+Delta*Point);
         if(CountOrders(5)<1) PutOrder(5,Bid-Delta*Point);
        }

      if(StopLimit==1 && LastType()==-1)
        {
         if(CountOrders(2)<1) PutOrder(2,Bid-Delta*Point);
         if(CountOrders(3)<1) PutOrder(3,Bid+Delta*Point);
        }
     }
   if(CountTrades()>0) DelOrder();

   Comment(LastType());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 16 ноября 2017, 20:38
0
Первоначальный лот считываем с открытого — 0.1.
Проход задаем в настройках — 30.

Дальше что выводим куда и как?
avatar

AM2

  • 15 ноября 2017, 20:50
+1
Все есть, только закрытие всех поз реализовал внутри советника:

extern int CloseOrders=0;    // 1-Close All Orders


www.opentraders.ru/downloads/1724/

avatar

AM2

  • 15 ноября 2017, 20:40
0
Покажите на скринах все. Проход понятно, а насчет стопа поясните.
avatar

AM2

  • 15 ноября 2017, 17:50
0
На пятницу.
avatar

AM2

  • 15 ноября 2017, 17:31
0
Не на мкл а сюда: www.opentraders.ru/downloads/
Т.к. я делал несколько раз подобные вещи.
avatar

AM2

  • 15 ноября 2017, 17:28
0
Укажите на скринах когда возникают и какая ошибка.
avatar

AM2

  • 14 ноября 2017, 20:53
0
Добавил: www.opentraders.ru/downloads/1692/

Вот функция :) 


double Lot()
  {
   double lot=Lots;

   switch(MMType)
     {
      case 0:
         lot=Lots;
         break;
      case 1:
         if(CountTrades()>1) lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades()),LotsDigits);
         break;
      case 2:
         for(int i=OrdersHistoryTotal()-1;i>=0;i--)
           {
            if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
              {
               if(OrderProfit()>0) break;
               if(OrderProfit()<0)
                 {
                  lot=OrderLots()*KLot;
                  break;
                 }
              }
           }
     }
   if(lot>MaxLot)lot=Lots;
   return (lot);
  }
avatar

AM2

  • 14 ноября 2017, 20:48
0
Здесь есть в базе подобные советники. Если не найдете то что нужно скиньте ссылку на самый близкий вариант.
avatar

AM2

  • 14 ноября 2017, 17:46
0
Андрей, спасибо, все работает как надо, только в советника мартин, а хотелось бы чтобы первые стоповые ордера открывались допустим лотом 1, после того как сработает один из первых стоповых ордеров все последующие отложенные ордера открывались допустим только лотом 2, пока все не закроется по общему профиту, после чего снова открываются два отложенные ордера первоначальным лотом.



Сделайте так:


   if(CountTrades()>0)
     {
      if(CountOrders(4)<1 && LastOrderType()==0) PutOrder(5,LastOrderPrice()-Step*Point,Lots*2);
      if(CountOrders(5)<1 && LastOrderType()==1) PutOrder(4,LastOrderPrice()+Step*Point,Lots*2);
     }


Вариант в базе менять не буду т.к. он более интересен. Если не разберетесь скину другим файлом.
avatar

AM2

  • 14 ноября 2017, 17:41
0
Это уже в следующем топике.
avatar

AM2

  • 13 ноября 2017, 21:36
0
Основные моменты есть, далее в следующем топике. Штучный товар с уникальными функциями. На платном он вам будет стоить, поэтому только в упрощенном виде.

avatar

AM2

  • 13 ноября 2017, 21:32