советник - разные вопросы - страница 31

 
Max Enrik:


if
(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   Print(ticketnumber);

Распечатайте номер своего билета - убедитесь, что он выглядит правильно.

-----

Макс Энрик:

if(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   if(OrderSelect(ticketnumber,SELECT_BY_TICKET))
     {
      if(StringFind(sparam,Button_1,0)>=0)
        {
         // ...
        }

      if(StringFind(sparam,Button_2,0)>=0)
        {
         //...
        }

      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
         if(Symbol()!=OrderSymbol()) continue;

         update_1();
         update_2();
         update_3();
        }
     }
   else printf("OrderSelect failed for %i",ticketnumber); 

}

Проверьте, работает ли OrderSelect.

-----

Макс Энрик:
if(id==CHARTEVENT_OBJECT_CLICK && (StringFind(sparam,Button_1,0)>=0 || StringFind(sparam,Button_2,0)>=0))
  {
   ticketnumber=(int) StringSubstr(sparam,1);

   if(OrderSelect(ticketnumber,SELECT_BY_TICKET))
     {
      if(StringFind(sparam,Button_1,0)>=0)
        {
         // ...
        }

      if(StringFind(sparam,Button_2,0)>=0)
        {
         //...
        }

      for(i=OrdersTotal()-1; i>=0; i--)
        {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
         if(Symbol()!=OrderSymbol()) continue;

         update_1();
         update_2();
         update_3();

        }
     }
  }

Я не понимаю этого.

Вы знаете, что это перебирает все заказы с тем же Symbol и запускает update_1() update_2() update_3()? А не только тот ордер, который вы нашли с ticketnumber.

 
honest_knave:

Напечатайте номер вашего тикета - убедитесь, что он выглядит правильно.
-----
Проверьте, работает ли OrderSelect.
-----
Я не понимаю этого.
Вы знаете, что это проходит через каждый заказ с тем же Symbol и запускает update_1() update_2() update_3()? А не только тот ордер, который вы нашли с ticketnumber.

Спасибо за ваш быстрый комментарий.
После вашего комментария я проверил еще раз. Все выглядит хорошо.

#1 - Номер билета - правильный.
#2 - OrderSelect() работает.
#3 - Да! Вы правы, но если я не буду его использовать, то update_*()'s не будет работать.

Я использую этот метод для Drags, он работает хорошо. Но этот метод не работает хорошо для CHARTEVENT_OBJECT_CLICK. (Он работает хорошо, когда я открываю один ордер, когда я открываю противоположный ордер, он работает. )

Мне очень нужна помощь, пожалуйста.

 
Покажите скриншот того, что вы хотите, чтобы произошло. Мне не ясна проблема.
 
honest_knave:
Покажите мне скриншот того, что вы хотите, чтобы произошло. Я не совсем понял проблему.

Пока я делал скриншот, я нашел решение, просто вау! (Я уже потратил на это более 2 часов).
Итак, пока все выглядит хорошо, если что-то пойдет не так, я напишу более четкий комментарий.

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

( Это было действительно волшебно. )

 
Max Enrik:

Пока я делал скриншот, я нашел решение, просто вау! (Я уже потратил на это более 2 часов).
Итак, пока все выглядит хорошо, если что-то пойдет не так, я напишу более четкий комментарий.

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

(Это было действительно волшебно.)

Я рад, что вы все исправили
 

#Профит Валюта Рассчитать - Открыть

Я только начал искать решение, как я могу рассчитать прибыль в валюте. Например: 100 пунктов = 0.89 USD в USDJPY.

Вопрос: Как я могу конвертировать прибыль ордера в пунктах в прибыль ордера в валюте, пожалуйста?

(Я просто беспокоюсь, что не смогу найти решение до закрытия рынка).

Любой четкий комментарий будет лучше, пожалуйста.

Заранее спасибо.

//--- 2-й раз редактировалось

Я нашел много похожих форумов, но не могу найти подобную тему.

 

Как получить прибыль в пунктах?

OrderProfit()

Возвращаемое значение:

Значение чистой прибыли (без свопов и комиссий) для выбранного ордера.

Для открытых ордеров это текущая нереализованная прибыль.

Для закрытых ордеров - фиксированная прибыль.

 
Marco vd Heijden:

Как получить прибыль в пунктах?

OrderProfit()

Возвращаемое значение:

Значение чистой прибыли (без свопов и комиссий) для выбранного ордера.

Для открытых ордеров это текущая нереализованная прибыль.

Для закрытых ордеров - фиксированная прибыль.

Спасибо за ваш комментарий.

Извините, Марко, я не описал свою проблему более четко.
Я могу легко получить значение Order Profit в пунктах и валюте - с помощью следующих кодов.

DoubleToString( OrderProfit(), 2 )
DoubleToString( change_to_points( Bid - OrderOpenPrice() ), 0 );

Но я пытаюсь найти решение для Stop Loss и Take Profit в валюте.

Я работаю над этим, и мне все еще нужна помощь, пожалуйста.

Заранее спасибо.

 
Max Enrik: ut Я пытаюсь найти решение для Stop Loss и Take Profit в валюте.
Замените OrderStopLoss на один из них.
  • Вы размещаете стоп там, где он должен быть - там, где причина для торговли больше не актуальна. Например, при торговле на отскоке от поддержки стоп опускается ниже поддержки.
  • Баланс счета * процент/100 = РИСК = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot+ CommissionPerLot) (Примечание OOP-OSL включает SPREAD, а DeltaPerLot обычно составляет около $10/pip, но он учитывает обменные курсы пары по отношению к валюте вашего счета).
  • НЕ используйте TickValue само по себе - DeltaPerLot.
  • Вы должны правильно нормализовать лоты и проверить их на min и max.
  • Вы также должны проверить FreeMargin, чтобы избежать стоп-аута.
 
whroeder1:
Замените OrderStopLoss на один из них.
  • Вы размещаете стоп там, где он должен быть - там, где причина для торговли больше не актуальна. Например, при торговле на отскоке от поддержки стоп опускается ниже поддержки.
  • Баланс счета * процент/100 = РИСК = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot+ CommissionPerLot) (Примечание OOP-OSL включает SPREAD, а DeltaPerLot обычно составляет около $10/pip, но он учитывает обменные курсы пары по отношению к валюте вашего счета).
  • НЕ используйте TickValue само по себе - DeltaPerLot.
  • Вы должны правильно нормализовать лоты и проверить на min и max.
  • Вы также должны проверить FreeMargin, чтобы избежать стоп-аута.

Спасибо за ваш более информативный комментарий.
Я изучаю его...

//--- 2-й раз редактировалось

Возможно, недостаток знаний кода не позволяет мне понять ваш метод расчета.
Но я думаю, что я близок к решению. И я пробую нижеприведенный код, который я получаю (для ордера на покупку) Stop Loss в валюте.
Тогда я получаю такие результаты (я знаю, что я что-то пропустил... потому что я не могу их подразумевать...), например: Прибыль: 7.67 USD - Pips: 1001 / для USDCAD. Но на самом деле Прибыль: 7.69 USD. (Я уже проверил (своп и комиссию)).

double  tickvalue               = MarketInfo( Symbol(), MODE_TICKVALUE ) / MarketInfo( Symbol(), MODE_TICKSIZE ),
        buy_stoploss_incurrency = OrderOpenPrice() - OrderStopLoss();
string  stoploss_incurrency     = DoubleToString( OrderLots() * buy_stoploss_incurrency * tickvalue + OrderCommission(), 2 );

Print( "stop loss in currency: ", stoploss_incurrency );

В общем, мне нужен совет, пожалуйста.

Заранее спасибо.

//--- 3-й раз редактировалось

Пожалуйста, кодер или программист сообщите мне, что вышеприведенный код правильный? Потому что теперь я вижу правильный Stop Loss в валюте для GBPCHF, но не правильный для USDCAD. Я не могу понять, что не так?! (Примечание: USDCAD открытая позиция, а GBPCHF отложенные ордера).

Все в порядке на данный момент. Так что, большое спасибо мистеру Уильяму.