Помощь в кодировании - страница 658

 

Уважаемый mladen

Если я хочу узнать тип последнего закрытого ордера и получил ли он прибыль в советнике, может ли следующая функция сделать эту работу:

int OrdersProfit()
  {
   int Profit;
   for (int i=OrdersHistoryTotal(); i>=0; i--)
     {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
      if (OrderType()==OP_BUY  && OrderProfit()> 0) Profit ="1" ;
      if (OrderType()==OP_SELL && OrderProfit()> 0) Profit ="2" ;
     }    
   return(Profit);
  }


Лучше всего,

 
IXI:

Уважаемый mladen

Если я хочу узнать тип последнего закрытого ордера и получил ли он прибыль в советнике, может ли следующая функция сделать эту работу:


Лучше всего,

Нет, не может (просто потому, что закрытые ордера не упорядочены по времени закрытия - по крайней мере, так сказано в руководстве: нет гарантии, что ордера упорядочены по времени закрытия). Это должно быть сделано примерно так:

int OrdersProfit()
{
   int      profit    = 0;
   datetime CloseTime = 0;
       for(int i=OrdersHistoryTotal()-1;i>=0;i--)
       {
           if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
           if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
           {
              CloseTime = OrderCloseTime();
              if (OrderType()==OP_BUY  && OrderProfit()> 0) Profit =1 ;
              if (OrderType()==OP_SELL && OrderProfit()> 0) Profit =2 ;
           } 
       }
       return(Profit);
}  
 

Уважаемый mladen

Большое спасибо за Ваш прекрасный ответ.

Лучше всего,

 

Дорогие друзья,

Не могли бы вы обновить прикрепленные индикаторы для последней сборки mt4?

Особенно, "123PatternsV6" замораживает мт4 и не работает!

 
oguz:

Дорогие друзья,

Не могли бы вы обновить прикрепленные индикаторы для последней сборки mt4?

Особенно, "123PatternsV6" замораживает мт4 и не работает!

Я думаю, что 123 нужен индикатор зигзаг, чтобы работать без замораживания терминала.
 
mntiwana:
Я думаю, что 123 нуждается в индикаторе зигзаг для работы без замораживания терминала.

Индикатор зигзаг уже доступен в mt4.

 
oguz:

Индикатор Zigzag уже доступен в mt4.

Новый зигзаг работает не так, как предыдущие версии. Он зависает в терминале, если используются некоторые параметры из вызовов iCustom().
 

Привет.

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

Сейчас я борюсь с таймингом картины.

Допустим, у меня есть if-статья для стохастика и я хочу подождать, пока MA не станет выше или ниже цены, прежде чем рисовать, как я могу это сделать?

Что я пробовал, и единственное, что пришло мне в голову:

if(iStochastic(NULL, PERIOD_CURRENT, _K_period, _D_period, Slowing, MODE_SMA, 0, MODE_MAIN, i) > 80
      && iStochastic(NULL, PERIOD_CURRENT, _K_period, _D_period, Slowing, MODE_SMA, 0, MODE_MAIN, i+1) < 80

 while High[i] > iMA(NULL, PERIOD_CURRENT, MAfilter, 0, MODE_EMA, PRICE_CLOSE, i+1) //Candlestick High < Moving Average
            (
               1+1
            )
       
      )

{
         Buffer1[i] = High[i]; //Set indicator value at Candlestick High
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "Selling opportunity"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer1[i] = 0;

1+1 только для заполнения цикла while, то, что я пытаюсь сделать, это подождать, чтобы нарисовать стрелку, пока максимум цены не окажется ниже MA, но я не хочу, чтобы это было и утверждение, так как крест произошел, я просто хочу подождать, чтобы использовать я рисую.

Однако это не увенчалось успехом, поэтому я прошу профессиональных кодеров в сообществе

 
NWFstudent:

Привет.

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

Сейчас я борюсь с таймингом картины.

Допустим, у меня есть if-статья для стохастика и я хочу подождать, пока MA не станет выше или ниже цены, прежде чем рисовать, как я могу это сделать?

Что я пробовал, и единственное, что пришло мне в голову:

1+1 только для заполнения цикла while, то, что я пытаюсь сделать, это подождать, чтобы нарисовать стрелку, пока максимум цены не окажется ниже MA, но я не хочу, чтобы это было и утверждение, так как крест произошел, я просто хочу подождать, чтобы использовать я рисую.

Однако это не увенчалось успехом, поэтому я прошу профессиональных кодеров в сообществе

Попробуйте вот так:

Buffer1[i] = 0;
if(   iStochastic(NULL, PERIOD_CURRENT, _K_period, _D_period, Slowing, MODE_SMA, 0, MODE_MAIN, i)   > 80
   && iStochastic(NULL, PERIOD_CURRENT, _K_period, _D_period, Slowing, MODE_SMA, 0, MODE_MAIN, i+1) < 80 
   && High[i] > iMA(NULL, PERIOD_CURRENT, MAfilter, 0, MODE_EMA, PRICE_CLOSE, i+1)) //Candlestick High < Moving Average
         Buffer1[i] = High[i]; //Set indicator value at Candlestick High

if(i == 0 && Time[0] != time_alert && Buffer1[i]!=0) { myAlert("indicator", "Selling opportunity"); time_alert = Time[0]; } //Instant alert, only once per bar
 
mladen:

Попробуйте вот так:

Это даст мне "сигнал, только когда пересечение происходит над МА, я хочу, чтобы оно было под МА, но я также хочу получить сигнал, если у меня есть пересечение над МА, а несколько баров спустя цена движется ниже МА.

Это то, что я пытался сделать с помощью цикла while, так что код будет циклически повторяться, пока аргумент не станет ложным, и начнет рисовать сигнал.

Я сделал схематический рисунок, возможно, вы поймете лучше.

Спасибо за ваш ответ в любом случае

Файлы:
illust.png  24 kb
Причина обращения: