Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 170

 
ponochka:
Здраствуйте! делаю скриншот экрана через функцию:
WindowScreenShot ("Screenshotname.png",1280,720); но оно все сохраняет в папку Files, а мне надо указать путь в другую папку что бы сохрняло! как это сделать?
Используйте символьные ссылки
 

Здравствуйте!

Изначально в советнике была реализована возможность экстренного локирования по свободной марже.Вот часть кода

  if (AccountFreeMargin() <= inpMarginLock)

   {

      gv.isEmergencyLock = true;

.....................

Со временем стало понятно, что это не совсем удобно.

Хотелось бы реализовать экстренный лок через просадку.

Т.е. при достижении скажем -100 долларов на депозите должно происходить локирование.

так вот прошу помочь, если кто может что надо прописать в коде вместо AccountFreeMargin(), чтобы происходило

экстренное локирование не по свободной марже, а по достижении просадки на депозите.

Заранее,Спасибо!!!!!!!

 
Здравствуйте , у меня проблема , при нажатии F9 выходит как обычно меню для открытия ордера , но там приходится выбирать инструмент пару , а не как раньше , какой инструмент открыл для того и выходит меню , подскажите как это исправить .
 
Andrey Sablin:
Здравствуйте , у меня проблема , при нажатии F9 выходит как обычно меню для открытия ордера , но там приходится выбирать инструмент пару , а не как раньше , какой инструмент открыл для того и выходит меню , подскажите как это исправить .

Сервис --> Настройки --> Торговля


 

Добрый день)

Помогите, пожалуйста, я новичок..... пытаюсь сделать советник на пересечении индикаторов super-signals-channel и ZigZag нашла шаблон. Закинула туда индикаторы, но ордера так и не открываются. Вот часть кода.... что не так делаю?... 

void Signal(double& ar[][],bool& op[],bool& cl[])

  {

   int trd=-1;

   double up=0.0,dn=0.0;

   //---

   ArrayInitialize(cl,false);

   ArrayInitialize(op,false);

   //подключаем индикатор фильтра ZigZag

   up=iCustom(_Symbol,tf,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,0);//имя, настройки, буфер, старт свеча для BUY

   dn=iCustom(_Symbol,tf,"ZigZag",InpDepth,InpDeviation,InpBackstep,0,0);//имя, настройки, буфер, старт свеча для SELL

    if(dn==EV) trd=0;

   if(up==EV) trd=0; //Comment(trd);

   //подключаем индикатор реверса и выхода из сделки

   up=iCustom(_Symbol,tf,"SuperSignalsChannel_1",SignalGap_1,ShowBars_1,dist_1,0,0);//старт свечи для BUY

   dn=iCustom(_Symbol,tf,"SuperSignalsChannel_1",SignalGap_1,ShowBars_1,dist_1,1,0);//старт свечи для SELL

   

   if(up>0.0 && up<EV) cl[1]=true;

   if(dn>0.0 && dn<EV) cl[0]=true;

   up=0.0;

   dn=0.0;

   //основной индикатор, по которому входим в рынок

   switch(Indicator)

     {

     case SuperSignalsChannel:

         up=iCustom(_Symbol,tf,"SuperSignalsChannel",SignalGap,ShowBars,dist_0,1,0);//старт свечи для BUY

         dn=iCustom(_Symbol,tf,"SuperSignalsChannel",SignalGap,ShowBars,dist_0,0,0);//старт свечи для SELL

         break;


P.S. если есть где-то на форуме подобная тема оставьте ссылку, пожалуйста

 


Добрый день. Вот есть такой советник,пытаюсь переделать под свои нужды, но пока выходит не очень. Ордера открываются по high и low цене, но мне нужно чтобы было high + 5пунктов. знаю, что за это отвечает distanceset, но не могу применить его  в коде. Надеюсь на помощь. Спасибо))))

//+------------------------------------------------------------------+
//|                                                 
//+------------------------------------------------------------------+


extern string TimeTrade  = "19:00";    // Время открытия позиции
extern int    DistanceSet    = 100;
extern int TYPE = 0;
extern int TP = 50;
extern int SL = 4500;
extern double lot = 0.1;
extern int Magic_Number = 639713;

int init(){   return(0);}
int deinit(){   return(0);}
int start()
{
   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;
   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
   double pAsk=Ask+(DistanceSet)*Point;
  double pBid=Bid-DistanceSet*Point;

   if(Orders_Total( Magic_Number, Symbol()) == 0 )
   {
      //Установка ордеров
      if(TYPE<=0)
      {
         // Здесь установим STOP-ордера
         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD - STOPLEVEL > Ask)
            OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+SPREAD,3,iHigh(Symbol(),PERIOD_D1,1) - SL*Point,iHigh(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);
         else Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");
         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Bid)
            OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1),3,iLow(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iLow(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);
         else Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");
      }
      if(TYPE>=1)
      {
         // Здесь установим LIMIT-ордера
         if(iHigh(Symbol(),PERIOD_D1,1) - STOPLEVEL > Bid)
            OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1),3,iHigh(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iHigh(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);
         else Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");
         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Ask)
            OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+SPREAD,3,iLow(Symbol(),PERIOD_D1,1) - SL*Point,iLow(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);
         else Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");
      }
   }
   return(0);
}


//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//
int Orders_Total( int mn, string sym)
{
   int num_orders=0;
   for(int i= OrdersTotal()-1;i>=0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber() == mn && sym==OrderSymbol())
         num_orders++;
   }
   return(num_orders);
}



 
Aleksandr SHablevskiy:


Добрый день. Вот есть такой советник,пытаюсь переделать под свои нужды, но пока выходит не очень. Ордера открываются по high и low цене, но мне нужно чтобы было high + 5пунктов. знаю, что за это отвечает distanceset, но не могу применить его  в коде. Надеюсь на помощь. Спасибо))))




extern string TimeTrade  = "19:00";    // Время открытия позиции

extern int    DistanceSet    = 100;

extern int    DistanceStopOrder    = 5;

extern int    DistanceLimitOrder   = 5;

extern int TYPE = 0;

extern int TP = 50;

extern int SL = 4500;

extern double lot = 0.1;

extern int Magic_Number = 639713;


int init(){   return(0);}

int deinit(){   return(0);}

int start()

{

   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;

   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;

   double pAsk=Ask+(DistanceSet)*Point;

   double pBid=Bid-DistanceSet*Point;


   if(Orders_Total( Magic_Number, Symbol()) == 0 )

   {

      //Установка ордеров

      if(TYPE<=0)

      {

         // Здесь установим STOP-ордера

         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD - STOPLEVEL > Ask)

            OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+DistanceStopOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) - SL*Point,iHigh(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Bid)

            OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1)-DistanceStopOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iLow(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");

      }

      if(TYPE>=1)

      {

         // Здесь установим LIMIT-ордера

         if(iHigh(Symbol(),PERIOD_D1,1) - STOPLEVEL > Bid)

            OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1)-DistanceLimitOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iHigh(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Ask)

            OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+DistanceLimitOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) - SL*Point,iLow(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");

      }

   }

   return(0);

}



//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//

int Orders_Total( int mn, string sym)

{

   int num_orders=0;

   for(int i= OrdersTotal()-1;i>=0;i--)

   {

      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

      if(OrderMagicNumber() == mn && sym==OrderSymbol())

         num_orders++;

   }

   return(num_orders);//---

   

  }

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



 
Lehfr:

extern string TimeTrade  = "19:00";    // Время открытия позиции

extern int    DistanceSet    = 100;

extern int    DistanceStopOrder    = 5;

extern int    DistanceLimitOrder   = 5;

extern int TYPE = 0;

extern int TP = 50;

extern int SL = 4500;

extern double lot = 0.1;

extern int Magic_Number = 639713;


int init(){   return(0);}

int deinit(){   return(0);}

int start()

{

   double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*Point;

   double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;

   double pAsk=Ask+(DistanceSet)*Point;

   double pBid=Bid-DistanceSet*Point;


   if(Orders_Total( Magic_Number, Symbol()) == 0 )

   {

      //Установка ордеров

      if(TYPE<=0)

      {

         // Здесь установим STOP-ордера

         if(iHigh(Symbol(),PERIOD_D1,1)+SPREAD - STOPLEVEL > Ask)

            OrderSend(Symbol(),OP_BUYSTOP,lot,iHigh(Symbol(),PERIOD_D1,1)+DistanceStopOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) - SL*Point,iHigh(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYSTOP, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Bid)

            OrderSend(Symbol(),OP_SELLSTOP,lot,iLow(Symbol(),PERIOD_D1,1)-DistanceStopOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iLow(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLSTOP, цена слишком близка или ниже Low");

      }

      if(TYPE>=1)

      {

         // Здесь установим LIMIT-ордера

         if(iHigh(Symbol(),PERIOD_D1,1) - STOPLEVEL > Bid)

            OrderSend(Symbol(),OP_SELLLIMIT,lot,iHigh(Symbol(),PERIOD_D1,1)-DistanceLimitOrder*Point,3,iHigh(Symbol(),PERIOD_D1,1) + SPREAD + SL*Point,iHigh(Symbol(),PERIOD_D1,1) + SPREAD - TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Magenta);

         else Alert("Невозможно установить OP_SELLLIMIT, цена слишком близка или выше High");

         if(iLow(Symbol(),PERIOD_D1,1) + STOPLEVEL < Ask)

            OrderSend(Symbol(),OP_BUYLIMIT,lot,iLow(Symbol(),PERIOD_D1,1)+DistanceLimitOrder*Point,3,iLow(Symbol(),PERIOD_D1,1) - SL*Point,iLow(Symbol(),PERIOD_D1,1) + TP*Point,NULL,Magic_Number,iTime(Symbol(),PERIOD_D1,0)+PERIOD_D1*60,Aqua);

         else Alert("Невозможно установить OP_BUYLIMIT, цена слишком близка или ниже Low");

      }

   }

   return(0);

}



//---- Возвращает количество ордеров указанного эксперта(Маджик,Символ) ----//

int Orders_Total( int mn, string sym)

{

   int num_orders=0;

   for(int i= OrdersTotal()-1;i>=0;i--)

   {

      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

      if(OrderMagicNumber() == mn && sym==OrderSymbol())

         num_orders++;

   }

   return(num_orders);//---

   

  }

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



Спасибо добрый человек, все работает))))
 

Добрый день, подскажите пожалуйста юному адепту где собака зарыта))

Переделал немного Momentum, протестировал вроде работает так как надо однако при попытке перенести его в советник происходит какая то неведомая хрень, считает вроде по нужному алгоритму но откуда лишние 0,0449  не пойму.

input int InpMomPeriod=1;  // Momentum Period

void OnTick()

{

double High1 = iCustom(Symbol(),PERIOD_CURRENT,"INdekators 1.0",InpMomPeriod,0,0);

}  

Файлы:
GBPUSDH11.png  16 kb
GBPUSDH1.png  16 kb
 

Здравствуйте уважаемые программисты.
Низкий вам поклон !

Имеется советник который после закрытия ордеров и отправки сообщения,

должен отключить Авто торговлю на терминале а именно ( отжать кнопку )

он, не выполняет этого, если юзер отключён от ВПС сервера.
Когда юзер подключен к впс серверу и терминал открыт, окна открыты,
советник запущен то функция отжатия кнопки срабатывает на отлично
но когда запускаешь советник, отключаешься от впс сервера
и после получения сообщения о том что эксперт сработал,
вновь заходишь на ВПС, кнопка остается не отжатой.

Советник работает на ВПС сервере Виндовс Сервер 16.

за эту функцию отвечает эта часть кода:

if(AutotradeOFF)PressOrReleaseAutotrade();

Вывод- эта функция не срабатывает когда юзер отключен от ВПС сервера.
Может имеются какие нибудь альтернативы решить эту проблему ?

В чём может быть дело ?

Помогите решить задачу пожалуйста.

Код прикладываю.

Зарание огромное спасибо за любую помощь в решении этого вопроса !

Файлы: