![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
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.
-----
{
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.
Напечатайте номер вашего тикета - убедитесь, что он выглядит правильно.
-----
Проверьте, работает ли OrderSelect.
-----
Я не понимаю этого.
Вы знаете, что это проходит через каждый заказ с тем же Symbol и запускает update_1() update_2() update_3()? А не только тот ордер, который вы нашли с ticketnumber.
Спасибо за ваш быстрый комментарий.
После вашего комментария я проверил еще раз. Все выглядит хорошо.
#1 - Номер билета - правильный.
#2 - OrderSelect() работает.
#3 - Да! Вы правы, но если я не буду его использовать, то update_*()'s не будет работать.
Я использую этот метод для Drags, он работает хорошо. Но этот метод не работает хорошо для CHARTEVENT_OBJECT_CLICK. (Он работает хорошо, когда я открываю один ордер, когда я открываю противоположный ордер, он работает. )
Мне очень нужна помощь, пожалуйста.
Покажите мне скриншот того, что вы хотите, чтобы произошло. Я не совсем понял проблему.
Пока я делал скриншот, я нашел решение, просто вау! (Я уже потратил на это более 2 часов).
Итак, пока все выглядит хорошо, если что-то пойдет не так, я напишу более четкий комментарий.
Спасибо, что уделили мне время.
( Это было действительно волшебно. )
Пока я делал скриншот, я нашел решение, просто вау! (Я уже потратил на это более 2 часов).
Итак, пока все выглядит хорошо, если что-то пойдет не так, я напишу более четкий комментарий.
Спасибо, что уделили мне время.
(Это было действительно волшебно.)
#Профит Валюта Рассчитать - Открыть
Я только начал искать решение, как я могу рассчитать прибыль в валюте. Например: 100 пунктов = 0.89 USD в USDJPY.
Вопрос: Как я могу конвертировать прибыль ордера в пунктах в прибыль ордера в валюте, пожалуйста?
(Я просто беспокоюсь, что не смогу найти решение до закрытия рынка).
Любой четкий комментарий будет лучше, пожалуйста.
Заранее спасибо.
//--- 2-й раз редактировалось
Я нашел много похожих форумов, но не могу найти подобную тему.
Как получить прибыль в пунктах?
Возвращаемое значение:
Значение чистой прибыли (без свопов и комиссий) для выбранного ордера.
Для открытых ордеров это текущая нереализованная прибыль.
Для закрытых ордеров - фиксированная прибыль.
Как получить прибыль в пунктах?
Возвращаемое значение:
Значение чистой прибыли (без свопов и комиссий) для выбранного ордера.
Для открытых ордеров это текущая нереализованная прибыль.
Для закрытых ордеров - фиксированная прибыль.
Спасибо за ваш комментарий.
Извините, Марко, я не описал свою проблему более четко.
Я могу легко получить значение Order Profit в пунктах и валюте - с помощью следующих кодов.
DoubleToString( change_to_points( Bid - OrderOpenPrice() ), 0 );
Но я пытаюсь найти решение для Stop Loss и Take Profit в валюте.
Я работаю над этим, и мне все еще нужна помощь, пожалуйста.
Заранее спасибо.
Спасибо за ваш более информативный комментарий.
Я изучаю его...
//--- 2-й раз редактировалось
Возможно, недостаток знаний кода не позволяет мне понять ваш метод расчета.
Но я думаю, что я близок к решению. И я пробую нижеприведенный код, который я получаю (для ордера на покупку) Stop Loss в валюте.
Тогда я получаю такие результаты (я знаю, что я что-то пропустил... потому что я не могу их подразумевать...), например: Прибыль: 7.67 USD - Pips: 1001 / для USDCAD. Но на самом деле Прибыль: 7.69 USD. (Я уже проверил (своп и комиссию)).
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 отложенные ордера).
Все в порядке на данный момент. Так что, большое спасибо мистеру Уильяму.