0
Не видно весь код. Может скобку пропустили? У меня 0 ошибок 0 предупреждений.
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.2;      // лот
extern int TrailingStop  = 0;        // трал
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

double b1=0,b2=0,b3=0,s1=0,s2=0,s3=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PutButton("B",100,160,"BUY");
   PutButton("S",100,120,"SELL");
   PutButton("C",100,80,"CLOSE");

   PutTrendLine("B1",Time[0],Bid+333*_Point,Time[111],Bid+333*_Point,Aqua);
   PutTrendLine("B2",Time[0],Bid+666*_Point,Time[111],Bid+666*_Point,Aqua);
   PutTrendLine("B3",Time[0],Bid+999*_Point,Time[111],Bid+999*_Point,Aqua);

   PutTrendLine("S1",Time[0],Bid-333*_Point,Time[111],Bid-333*_Point,Red);
   PutTrendLine("S2",Time[0],Bid-666*_Point,Time[111],Bid-666*_Point,Red);
   PutTrendLine("S3",Time[0],Bid-999*_Point,Time[111],Bid-999*_Point,Red);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
   ObjectDelete(0,"C");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,0);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
Весь код не входит. Поэтому частями.
avatar

ssg

  • 12 июня 2020, 15:09
0
Попробуйте так:
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   b1=ObjectGetDouble(0,"B1",OBJPROP_PRICE1);
   b2=ObjectGetDouble(0,"B2",OBJPROP_PRICE1);
   b3=ObjectGetDouble(0,"B3",OBJPROP_PRICE1);

   s1=ObjectGetDouble(0,"S1",OBJPROP_PRICE1);
   s2=ObjectGetDouble(0,"S2",OBJPROP_PRICE1);
   s3=ObjectGetDouble(0,"S3",OBJPROP_PRICE1);

   BU();
   if(TrailingStop>0) Trailing();

   if(CountTrades()<1)
     {
      if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
        {
         if(Ask>b1)
            PutOrder(0,Ask);
        ObjectSetInteger(0,"B",OBJPROP_STATE,false); //--- отжать кнопку    
        }
      if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
        {
         if(Bid<s1)
            PutOrder(1,Bid);
         ObjectSetInteger(0,"S",OBJPROP_STATE,false); //--- отжать кнопку    
        }
     }

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

   Comment("\n B1: ",b1,
           "\n B2: ",b2,
           "\n B3: ",b3,
           "\n S1: ",s1,
           "\n S2: ",s2,
           "\n S3: ",s3);
  }
//+------------------------------------------------------------------+
avatar

ssg

  • 12 июня 2020, 12:36
0
Для «стратегии Черепах» слишком вольная трактовка.
avatar

ssg

  • 10 июня 2020, 14:00
+1
1.Это не ББ неадекватный, а пользователь неадекватный.
2.Принцип расчета Энвелоп и ББ совершенно разный.
Нанесите оба индикатора на график и увидите совершенно разные каналы.
Торговля с использованием ББ основана на других принципах и правилах.
Прочитайте как торгуют используя ББ.
3.Все ББ построены по одному алгоритму.Предложенный не исключение.
Только больше наворотов.
4.Добавил что просите.Торговля от самых крайних.
5.Алгоритм замены блоков прежний.

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 400;      // стоп лосс
extern int TakeProfit    = 300;      // тейк профит
extern double Profit     = 100;      // общая прибыль
extern double Loss       = 100;      // общий убыток
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 0;        // пункты БУ
extern int TrailingStop  = 100;      // трал
extern bool Usredn       = 0;        // 1-использовать усреднение 0-не использовать
extern int Step          = 50;       // шаг усреднения
extern int Count         = 5;        // число ордеров
extern bool Buystop      = 1;        //1-выстовить байстоп 0-не выставлять
extern bool Buylimit     = 0;        //1-выстовить байлимит 0-не выставлять
extern bool Sellstop     = 1;        //1-выстовить селлстоп 0-не выставлять
extern bool Selllimit    = 0;        //1-выстовить селллимит 0-не выставлять
extern int Expiration    = 5;        // истечение ордера(часы)
extern int Step_stop     = 100;      // дистанция для стопордера
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int CloseSig      = 0;        // 1-закрытие по сигналу 0-нет
extern int TaimOut       = 10;       // тайм аут ордера(свечей)
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

extern int MAPeriod      = 240;      // период МА
extern bool Envelop      = true;
extern int EPeriod       = 240;
extern int Method        = 0;
extern int Price1        = 0;
extern int Shift         = 0;
extern double Dev        = 0.3;

extern bool BBands       = true;
extern int PeriodBands   = 500,
           Deviation     = 2,
           bands_shift   = 0;
           
extern bool VWAPbands    = true;
          
datetime TimeBar;


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   
   double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift);
   double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1);
   double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1);
   
   double bandsH=iBands(NULL,0,PeriodBands,Deviation,bands_shift,0,1,1);
   double bandsL=iBands(NULL,0,PeriodBands,Deviation,bands_shift,0,2,1);
  
   double up=iCustom(NULL,0,"VWAP bands alerts",0,1);
   double dn=iCustom(NULL,0,"VWAP bands alerts",6,1);
 
   
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();
   if(AllProfit()>Profit && Profit>0) CloseAll();
   if(AllProfit()<-Loss && Loss>0) CloseAll();

//---  стоповые в обратную сторону первой позиции 

 if(Envelop==true)
  { 
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {
      if(Ask<EDN) 
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Buystop) PutOrder(4,Ask+Step_stop*_Point);
          if(Buylimit)PutOrder(2,Ask-Step_stop*_Point);
        }
     }
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {   
      if(Bid>EUP)
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Selllimit)PutOrder(3,Ask+Step_stop*_Point);
          if(Sellstop) PutOrder(5,Bid-Step_stop*_Point);
        }    
     }
   }
//--- 
if(BBands==true)
  { 
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {
      if(Ask<bandsL) 
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Buystop) PutOrder(4,Ask+Step_stop*_Point);
          if(Buylimit)PutOrder(2,Ask-Step_stop*_Point);
        }
     }
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {   
      if(Bid>bandsH)
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Selllimit)PutOrder(3,Ask+Step_stop*_Point);
          if(Sellstop) PutOrder(5,Bid-Step_stop*_Point);
        }    
     }
   }
//---
if(VWAPbands==true)
  { 
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {
      if(Ask<dn) 
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Buystop) PutOrder(4,Ask+Step_stop*_Point);
          if(Buylimit)PutOrder(2,Ask-Step_stop*_Point);
        }
     }
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {   
      if(Bid>up)
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Selllimit)PutOrder(3,Ask+Step_stop*_Point);
          if(Sellstop) PutOrder(5,Bid-Step_stop*_Point);
        }    
     }
   }
//--- 
 if(Usredn)
  {
   if(CountTrades()>0 && CountTrades()<Count)
     {
      if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask);  
      if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid); 
     }
  }
   if(CloseSig>0)
     {
      if(Bid>ma) CloseAll(0);
      if(Ask<ma)  CloseAll(1);
     }

   Comment("\n Lot: ",Lot(),
           "\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+
avatar

ssg

  • 10 июня 2020, 05:28
0
1.Возьмите любой усреднитель из базы с увеличением лота торгующим по Ма.
2.Добавьте еще одну функцию
<code>//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(CountTrades()>0)
      lot=NormalizeDouble(Lots*MathPow(KLot,CountTrades()),2);
   if(lot>MaxLot)
      lot=Lots;
   return(lot);
  }</code>

3.В этой функции замените лот на шаг.
4.А можно ничего не делать и посмотреть стратегию и скачать советник «Валенок».
Всё.
avatar

ssg

  • 9 июня 2020, 19:24
+1
1.Ограничивать кол-во ордеров не советую, лучше увеличьте шаг.
Иначе при длинном тренде лимит ордеров кончиться, а тренд так и будет
продолжаться и нечем будет усредняться.
2.Сделал на стандартном ББ. Ваш излишне наворочен.Если не смогли сами его
добавить — значит не сможете и разобраться с индикатором.
3.Поменяйте весь блок настроек на этот:

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 1;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 400;      // стоп лосс
extern int TakeProfit    = 300;      // тейк профит
extern double Profit     = 100;      // общая прибыль
extern double Loss       = 100;      // общий убыток
extern int BULevel       = 0;        // уровень БУ
extern int BUPoint       = 0;        // пункты БУ
extern int TrailingStop  = 100;      // трал
extern bool Usredn       = 0;        // 1-использовать усреднение 0-не использовать
extern int Step          = 50;       // шаг усреднения
extern int Count         = 5;        // число ордеров
extern bool Buystop      = 1;        //1-выстовить байстоп 0-не выставлять
extern bool Buylimit     = 0;        //1-выстовить байлимит 0-не выставлять
extern bool Sellstop     = 1;        //1-выстовить селлстоп 0-не выставлять
extern bool Selllimit    = 0;        //1-выстовить селллимит 0-не выставлять
extern int Expiration    = 5;        // истечение ордера(часы)
extern int Step_stop     = 100;      // дистанция для стопордера
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int CloseSig      = 0;        // 1-закрытие по сигналу 0-нет
extern int TaimOut       = 10;       // тайм аут ордера(свечей)
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

extern int MAPeriod      = 240;      // период МА
extern bool Envelop      = true;
extern int EPeriod       = 240;
extern int Method        = 0;
extern int Price1        = 0;
extern int Shift         = 0;
extern double Dev        = 0.3;

extern bool BBands       = true;
extern int PeriodBands   = 500,
           Deviation     = 2,
           bands_shift   = 0;
datetime TimeBar;

4.Замените так же весь блок
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   
   double ma=iMA(NULL,0,MAPeriod,0,0,0,Shift);
   double EUP=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,1,1);
   double EDN=iEnvelopes(Symbol(),0,EPeriod,Method,Shift,Price1,Dev,2,1);
   
   double bandsH=iBands(NULL,0,PeriodBands,Deviation,bands_shift,0,1,1);
   double bandsL=iBands(NULL,0,PeriodBands,Deviation,bands_shift,0,2,1);
   
   if(BULevel>0) BU();
   if(TrailingStop>0) Trailing();
   if(AllProfit()>Profit && Profit>0) CloseAll();
   if(AllProfit()<-Loss && Loss>0) CloseAll();

//---  стоповые в обратную сторону первой позиции 
 if(Envelop)
  { 
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {
      if(Ask<EDN) 
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Buystop) PutOrder(4,Ask+Step_stop*_Point);
          if(Buylimit)PutOrder(2,Ask-Step_stop*_Point);
        }
     }
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {   
      if(Bid>EUP)
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Selllimit)PutOrder(3,Ask+Step_stop*_Point);
          if(Sellstop) PutOrder(5,Bid-Step_stop*_Point);
        }    
     }
   }
//--- 
if(BBands)
  { 
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {
      if(Ask<bandsL) 
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Buystop) PutOrder(4,Ask+Step_stop*_Point);
          if(Buylimit)PutOrder(2,Ask-Step_stop*_Point);
        }
     }
   if(CountTrades()<1 && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && TimeBar<Time[0])
     {   
      if(Bid>bandsH)
        {
           TimeBar=Time[0]+Period()*TaimOut*60;
          if(Selllimit)PutOrder(3,Ask+Step_stop*_Point);
          if(Sellstop) PutOrder(5,Bid-Step_stop*_Point);
        }    
     }
   }
//---
 if(Usredn)
  {
   if(CountTrades()>0 && CountTrades()<Count)
     {
      if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/_Point>=Step) PutOrder(0,Ask);  
      if(FindOrderType()==1 && (Bid-FindLastSellPrice())/_Point>=Step) PutOrder(1,Bid); 
     }
  }
   if(CloseSig>0)
     {
      if(Bid>ma) CloseAll(0);
      if(Ask<ma)  CloseAll(1);
     }

   Comment("\n Lot: ",Lot(),
           "\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit());
  }
//+------------------------------------------------------------------+

5.Обратите внимание в блоке настроек на
extern bool Envelop = true;//false
extern bool BBands = true;//false
сейчас есть возможность торговать или по старому алгоритму или торговать по
ББ.
avatar

ssg

  • 9 июня 2020, 19:11
0
Андрей спасибо.<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; 
У себя тоже проверил, работает.
Осталась проблема с локовой позицией.
Для одной пары решил просто: добавил функцию PutOrderLock(), что бы можно было и лот менять и магик для дальнейшего учета.
Дописал условие выставления лока в функции CloseAll() добавив условие
if(OrderTicket()==tik)
{
А проблема определения наименования пары самого убыточного осталась.
Нужна функция на подобии LossTicket() только что бы возвращала не тикет а символ пары.
Потом обращения к ней добавить в void CloseAll() как и LossTicket() и проблема будет решена!
Смотрел функции Кима, но не нашёл нужной.
Андрей, если будет возможность — добавьте выставление лока для оставшейся пары.
Спасибо.
avatar

ssg

  • 9 июня 2020, 06:43
0
Я и не говорю, что это элементарно.
Просто я сам этого не смог сделать и по этому обратился к Вам.
Пишу мультивалютный советник и этот блок часть стратегии.Его я не смог сам осилить. А без этого блока сейчас все встало.
Андрей, если появиться возможность и время допишите пожалуйста этот момент.
Спасибо за работу и помощь:) 
avatar

ssg

  • 6 июня 2020, 17:13
0
Андрей еще раз приношу свои извинения!*hi* 
Подвела моя невнимательность.
Смутили лишние кнопки и в функции AllProfit(int ot=-1) строка
if(OrderSymbol()==Symbol())
           {
.
Мне кажется она лишняя.
Дальше по коду в функции LossTicket() идет перебор тикетов уже без ссылки на пару только на магик…
То же самое в функции void CloseAll().
Нет возможности проверить сейчас мультивалютность, но наверное должно работать правильно.
Андрей добавьте пожалуйста отключаемую функцию локирования оставшейся позиции.
Прошу прощения за свою невнимательность.
avatar

ssg

  • 6 июня 2020, 15:25
0
Прошу прощения, сразу не сообразил*hi* !
Как я понял функцию открытия позиций добавлена для проверки работоспособности в тестере.
Но посмотрите остальные мои замечания и пожелание.
Еще раз приношу свои изменения.
avatar

ssg

  • 6 июня 2020, 14:55
0
Андрей, добрый день.
Спасибо за оперативность.
Но помощник не доработан.
1.Он не мультивалютный.
2.Судя по коду он не только не мультивалютный, но перебирает ордера только одной пары и закрывает все позиции у которых профит меньше 0.
Я просил что бы советник смотрел все позиции по всем парам и закрывал все позиции КРОМЕ самой убыточной.
Андрей прочитай те пожалуйста еще раз ТЗ.
И если Вас сильно не затруднит добавьте пожалуйста локирование оставшейся не закрытой самой убыточной позиции.
Функцию открытия позиций можно убрать.Она не нужна.
Спасибо.
avatar

ssg

  • 6 июня 2020, 14:37
0
Это не важно. Речь идет о блоке void OnTick().
Все очень просто: есть сигнал — значит открываем позицию. Все это будет при любом индикаторе. Нет команды — сколько позиций открывать. Срипт открыл бы одну позицию, а советник будет открывать постоянно при таком написании.
avatar

ssg

  • 4 июня 2020, 14:59
0
Добрый день и Удачи!
Какие индикаторы используете в торговле?
Почему отказались от прежних, судя по скринам раньше были другие индикаторы?
avatar

ssg

  • 4 июня 2020, 06:53
0
Можно добавить условие на прохождение ценой некоторого расстояния и только после этого доливаться (смотреть любой усреднитель или гридер) при наличии сигнала.
Можно ограничить одно новая позиция в бар, при наличии сигнала.
Например так:

if( t!=Time[0]){  
if(CountTrades(0)>0 && signal== -1)
{
PutOrder(0,Ask);
}

if(CountTrades(1)>0 && signal== 1)
{
PutOrder(1,Bid);
}
t=Time[0];
}


В блоке настроек добавить
datetime t=0;
avatar

ssg

  • 4 июня 2020, 04:47
0
Андрей, если еще не начали писать программу по моему заказу и если не затруднит добавьте пожалуйста через триггер следующее условие:
-открыть противоположенную позицию оставшейся после общего закрытия позиции;
-не отрывать противоположенную позицию оставшейся после общего закрытия
позиции;
То есть выставить лок или не выставлять.
В моем примере:
После закрытия всех позиций, кроме самой убыточной, осталась позиция USDJPY(бай) так как у этой валютный пары самый большой убыток — 27.1 $ советник откроет(или не откроет) позицию USDJPY(селл) тем же лотом и с тем же магиком.
Триггер вынесен в настройки.Например так:
extern bool stoplock = true;

Спасибо.
avatar

ssg

  • 2 июня 2020, 05:12
0
Значит не выполняются два условия одновременно. Значит поинт подает сигнал с запозданием для советника.
Если есть уверенность в сигналах, то торговать полуавтоматом. Только его намного доработать надо.
avatar

ssg

  • 29 мая 2020, 20:07
0
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  /*
  
extern int    PdfMaLength         = 10;      // Pdfma Length
extern double Sensitivity         = 5;       // Sensivity Factor
extern double StepSize            = 2;       // Constant Step Size
extern double Variance            = 1;       // Pdfma variance
extern double Mean                = 0.0;     // Pdfma mean
  */
   double up=iCustom(NULL,0,IndName,PdfMaLength ,Sensitivity,StepSize,Variance,Mean,3,1);
   double dn=iCustom(NULL,0,IndName,4,1);
   double up2=iCustom(NULL,0,IndName,0,1);
   double dn2=iCustom(NULL,0,IndName,1,1);


по аналогии допишите сами в остальных строчках.
avatar

ssg

  • 28 мая 2020, 16:33