[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 417

 

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

 

Ладно с цветом разобрался...

Вопрос такой- я хочу "спрятать SL" от ДЦ, т.е. не выставлять их с оператором открытия, а присваивать переменной внутри эксперта:

extern double TrailingStop=25.0;

extern double Lots=0.1;

....
double StopB;

.....

if( условие входа) {

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "Buy EA",123,0,Green);
StopB=Ask-TrailingStop*Lots; //
прячем стоп <- правильно ли я делаю?

}

.....

if( условия выхода прибыли || Ask > StopB)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //
закрываем позицию
return(0); // exit
}

И куда прописывать условия выхода SL? Вместе с условием закрытия прибыли с помощью "||" или отдельно?

 

Добрый день! Пожалуйста, подскажите как правильно использовать функцию iCustom, я хочу по цвету индикатора, который рисуется в отдельном окне гистограммой, создавать условия для сделок:

color Oct_1=iCustom(NULL,0,"octava_1");

if ( Oct_1==Green).... и.т.д.

при компиляции программа выдает ошибку, пишет "'green' - variable not defined, в чем причина?

Буду очень признательна за ответ)))

 

Вопрос снимается, заглавная буква имеет значение оказывается)))

 
DOCTORS:

Ладно с цветом разобрался...

Вопрос такой- я хочу "спрятать SL" от ДЦ, т.е. не выставлять их с оператором открытия, а присваивать переменной внутри эксперта:

extern double TrailingStop=25.0;

extern double Lots=0.1;

....
double StopB;

.....

if( условие входа) {

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "Buy EA",123,0,Green);
StopB=Ask-TrailingStop*Lots; //
прячем стоп <- правильно ли я делаю?

}

.....

if( условия выхода прибыли || Ask > StopB)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //
закрываем позицию
return(0); // exit
}

И куда прописывать условия выхода SL? Вместе с условием закрытия прибыли с помощью "||" или отдельно?

Я не проффи, но задавался такой же целью. Лично я написал так (проффи прийдут - поправят)

Эта часть подхватывает открытый ордер и присваевает переменным значение стопа и тэйка

// +----------------------------------------------------------------------+
//------- : функция поиска открытых ордеров по символу графика, подхват и установки уровней стопа и профита
double TradeSymbol()
   {
   int    TotalTradeSymbol = 0;
   int    SendGo           = 0;
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(StopLoss   > 0 && Bid < OrderOpenPrice()) {sl = NormalizeDouble(OrderOpenPrice() - StopLoss*Point, Digits);}  
          if(TakeProfit > 0)                           {tp = NormalizeDouble(OrderOpenPrice() + TakeProfit*Point, Digits);}
          }
        if(OrderType()== OP_SELL)
          {
          if(StopLoss   > 0 && Ask > OrderOpenPrice()) {sl = NormalizeDouble(OrderOpenPrice() + StopLoss*Point, Digits);}  
          if(TakeProfit > 0)                           {tp = NormalizeDouble(OrderOpenPrice() - TakeProfit*Point, Digits);} 
          }
        if(OrderStopLoss()   != sl){SendGo++;}
        if(OrderTakeProfit() != tp){SendGo++;}
        if(!UseVirtualTradeLevel && SendGo != 0) {OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,CLR_NONE);}
        TotalTradeSymbol++;
        }
      }
    return(TotalTradeSymbol);  
    }
// +----------------------------------------------------------------------+

эта часть проверяет и закрывает по тэйку

// +----------------------------------------------------------------------+
//------- : функция проверки тейкпрофита
void CheckTakeProfit()
   {
   if(tp == 0)return(0);
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(Bid > tp)
            {
            OrderClose(OrderTicket(), OrderLots(), Bid, SleepPage, Lime);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        if(OrderType()== OP_SELL)
          {
          if(Ask < tp)
            {
            OrderClose(OrderTicket(), OrderLots(), Ask, SleepPage, Lime);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        }
      }
    }
// +----------------------------------------------------------------------+

эта часть проверяет и закрывает по стопу

// +----------------------------------------------------------------------+
//------- : функция проверки стоплоса
void CheckStopLoss()
   {
   if(sl == 0)return(0);
   total=OrdersTotal();  
   for(cnt=0;cnt<total;cnt++)
      {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
        if(OrderType()== OP_BUY)
          {
          if(Bid < sl)
            {
            OrderClose(OrderTicket(), OrderLots(), Bid, SleepPage, Blue);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        if(OrderType()== OP_SELL)
          {
          if(Ask > sl)
            {
            OrderClose(OrderTicket(), OrderLots(), Ask, SleepPage, Blue);
            if(UseSound)PlaySound("ok.wav");
            }
          }
        }
      }
    }
// +----------------------------------------------------------------------+
P.S.

проффи - не смейтесь над самоучкой, может можно и по другому, но у меня работает и так ....

 
elmucon:

Я не проффи, но задавался такой же целью. Лично я написал так (проффи прийдут - поправят)

Эта часть подхватывает открытый ордер и присваевает переменным значение стопа и тэйка

эта часть проверяет и закрывает по тэйку

эта часть проверяет и закрывает по стопу

P.S.

проффи - не смейтесь над самоучкой, может можно и по другому, но у меня работает и так ....

Всё практически гуд! Единственное есть пару странностей по входу/выходу. Ну и такая стратегия не спасает от проскальзывания. А так спасибо огромное!
 

Скажите как определить текущий таймфрейм для советника?

Нужно если таймфрейм М1 выполнить одно условие, а если таймфрейм М5 выполнить другое условие.

 
sss2019:

Скажите как определить текущий таймфрейм для советника?

Нужно если таймфрейм М1 выполнить одно условие, а если таймфрейм М5 выполнить другое условие.


При помощи функции Period()
 
sss2019:

Скажите как определить текущий таймфрейм для советника?

Нужно если таймфрейм М1 выполнить одно условие, а если таймфрейм М5 выполнить другое условие.

if (Period()==1) return; //Условие минуток
if (Period()==5) bool working=true; //Условие пятиминуток
 
splxgf:


Спасибо. Значит периоду M1 соответствует значение 1, а периоду M5 соответствует значение 5, то получается что периоду H1 соответствует значение 60, а периоду H4 - 240 верно?

Мне нужно чтобы заработала вот эта конструкция, когда период M1 выбирается значение case 1 а когда период M15 выбираетсся значение case 15. Так будет работать, или нужно обязательно делать case 1 case 2 case 3 - по порядку?

  switch(Period())
    {
    case 1 : Ba = 60;
    case 5 : Ba = 12;
    case 15 : Ba = 4;
    case 30 : Ba = 2;
    case 60 : Ba = 1;
    }
Причина обращения: