0
проверил. все тейки по одной цене:

avatar

AM2

  • 28 июля 2020, 20:38
0
Когда цена развернулась и пошла вверх — перестал торговать


советник торгует выше ниже открытия дня, плюс видно зависшие баи.
avatar

AM2

  • 28 июля 2020, 20:24
0
Андрей Вы нам ответите?


если в тестере работает значит будет работать на демо в 90% случаев. могу еще проверить сам на демо. открою позу вручную, поставлю советник с магиком 0.
avatar

AM2

  • 28 июля 2020, 20:17
+1
в своем варианте:

1. подправил сигнал
2. добавил закрытие по противоположному сигналу
3. закрытие через указанное число часов



www.opentraders.ru/downloads/2281/
avatar

AM2

  • 27 июля 2020, 20:38
0
это не тз. тз будет когда вы все максимально подробно опишите, укажете на скринах как строятся уровни, формулы для расчета, количество и др.
avatar

AM2

  • 27 июля 2020, 19:38
0
тз на индикатор рассмотрю
avatar

AM2

  • 26 июля 2020, 19:23
0
здесь нужно грамотное тз и четкий алгоритм. дальше не ко мне
avatar

AM2

  • 26 июля 2020, 11:13
0
опишите весь цикл максимально подробно, со скринами к каждому пункту. советник очень непростой. пока не понятно.

сделал только заготовку:




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

//--- Inputs
extern double Lots       = 0.1;      // торговый объем ордера
extern double MaxTake    = 3000;     // максимальный тейк
extern double KTake      = 2;        // увеличение тейка
extern int StopLoss      = 0;        // лось
extern int TakeProfit    = 300;      // язь
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

double take=TakeProfit;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutButton("B",100,160,"BUY");
   PutButton("S",100,120,"SELL");
   PutButton("C",100,80,"CLOSE");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,9);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()<2)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   bool cl;
   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();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Результат последней сделки                                       |
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int 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=8;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==0)
           {
            type=0;//buy
           }
         if(OrderType()==1)
           {
            type=1;
           }
        }
     }
   return(type);
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   /*
   1. Открываем селл с тп 300
   2. Закрылись по тп открываем селл 600 и бай 300
   3. ...???
   */

   int r=0;

   if(take>MaxTake)
      take=TakeProfit;

   if(CountTrades()<2)
     {
      if(LastDealResult()==1 && LastDealType()==1)
        {
         take*=KTake;
         r=OrderSend(NULL,1,Lots,NormalizeDouble(Bid,_Digits),Slip,0,NormalizeDouble(Bid-take*_Point,_Digits),"",Magic,0,Red);
         r=OrderSend(NULL,0,Lots,NormalizeDouble(Ask,_Digits),Slip,0,NormalizeDouble(Ask+take/KTake*_Point,_Digits),"",Magic,0,Blue);
        }

      if(LastDealResult()==1 && LastDealType()==0)
        {
         take*=KTake;
         r=OrderSend(NULL,1,Lots,NormalizeDouble(Bid,_Digits),Slip,0,NormalizeDouble(Bid-take/KTake*_Point,_Digits),"",Magic,0,Red);
         r=OrderSend(NULL,0,Lots,NormalizeDouble(Ask,_Digits),Slip,0,NormalizeDouble(Ask+take*_Point,_Digits),"",Magic,0,Blue);
        }
     }

   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      r=OrderSend(NULL,0,Lots,Ask,Slip,0,Ask+TakeProfit*_Point,"",Magic,0,Blue);
      ObjectSetInteger(0,"B",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      r=OrderSend(NULL,1,Lots,Bid,Slip,0,Bid-TakeProfit*_Point,"",Magic,0,Red);
      ObjectSetInteger(0,"S",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,false);
     }

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

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+



avatar

AM2

  • 26 июля 2020, 09:17
+1
написал по скринам славы: www.opentraders.ru/downloads/2735/



avatar

AM2

  • 24 июля 2020, 20:10
0
Андрей, для понимания задачи проведите тест с параметром в настройках: Count= 1; // число поз.+ закрытие по сигналу и тогда вы поймете, что я пытаюсь объяснить и почему советник не работает


сейчас закрывает с одной позой :) 



www.opentraders.ru/downloads/2681/
avatar

AM2

  • 23 июля 2020, 22:07
0
если бы были скрины и развернутый ответ на мой вопрос, давно бы было все готово
avatar

AM2

  • 23 июля 2020, 21:02
0
1) Добавить функцию, смысл в которой не давать советнику открывать новую сделку, если был получен убыток меньше чем N свечей назад


это добавил

lerdon.opentraders.ru/54037.html — есть советник который тоже работает по ADX.

Так вот логику этого советника вписать вместе с доп. настройками в советник zakaz.opentraders.ru/49215.html (УКАЗАЛ В НАЧАЛЕ ТОПА)


а с таким усложнением эксперта уже не ко мне. тут и так уже всего много наворочено.

www.opentraders.ru/downloads/2208/

avatar

AM2

  • 23 июля 2020, 20:40
0
по скрину славы все понятно. еще скрин на селл, все вместе собрать и как следует оформить, лучше новым топиком
avatar

AM2

  • 23 июля 2020, 19:59
0
по умолчанию магик 123. у ручных 0. у вас какой стоит?
avatar

AM2

  • 23 июля 2020, 19:41
0
1 заказ в месяц. если надо больше ищите поручителя
avatar

AM2

  • 22 июля 2020, 21:36
0
я не смотрю чужой код. пишите полностью тз и ищите поручителя
avatar

AM2

  • 22 июля 2020, 21:15