Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
(Прежде чем я попытался написать этот комментарий, я думаю, что я дико исследовал, чтобы найти решение, да, я нашел похожие темы, но я не нашел решения для этой проблемы. )
Я использую приведенный ниже код для ордера на продажу, который показывает мне Stop Loss в пунктах, он показывает мне правильное значение до тех пор, пока Stop Loss не станет положительным.
Поэтому у меня нет никаких идей, как я могу попробовать что-то сделать, чтобы решить эту проблему.
Любой хороший комментарий будет лучше, пожалуйста.
(Примечание: я не использую трейлинг-стоп в данный момент. Также приведенный ниже код только для обновления информации, а не для OrderSend() или подобных вещей. )
{
riskinpips=change_to_pips(OrderStopLoss()-OrderOpenPrice());
}
Print("stop loss in pips",DoubleToString(riskinpips,2));
Заранее спасибо.
( примечание: скриншоты ярлыков сделаны программой фоторедактор для описания моей проблемы )Наибольшее значение минус наименьшее значение дают результат, поэтому вы можете проверить, какое из них наибольшее.
{
// orderstoploss - orderopenprice
}
else if(OrderOpenPrice()>OrderStopLoss())
{
// orderopenprice - orderstoploss
}
Ну, это наибольшее значение минус наименьшее значение, которое дает вам результат, так что вы можете проверить, какой из них является наибольшим.
{
// orderstoploss - orderopenprice
}
else if(OrderOpenPrice()>OrderStopLoss())
{
// orderopenprice - orderstoploss
}
Я просто смеюсь над собой, что никогда не обращаю на это внимания. Я думаю, это может мне помочь. Скоро я попробую.
Большое спасибо, мистер Марко.
#Profit Currency Calculate - Закрыто
Пока что работает идеально.
Большое спасибо @Marco vd Heijden и @whroeder1
#Время - Открыто
С тех пор как я начал исследовать вопрос о времени / часах для моего советника. Я вижу, что авторы используют для этого start() JUST в индикаторе.
Я использую OnTimer() и OnTick() в своем советнике, я не хотел бы использовать start().
Поэтому мне просто нужно убедиться / узнать, какая специальная функция будет лучше для функции времени и часов?
Я продолжу исследования по этому вопросу 10 часов спустя.
(примечание: я уже нашел несколько индикаторов времени и часов на странице Mql5.com Codebase - но я не люблю копировать и вставлять)
Любые хорошие комментарии, обмен форумом, ссылки и что-то еще было бы лучше для меня.
Заранее спасибо.
Функция start заменяется на OnStart только в скриптах. В советниках и индикаторах ее следует переименовать в OnTick и OnCalculate соответственно. Код, который должен выполняться во время работы программы mql5, должен находиться в этих трех функциях:
См.: https://www.mql5.com/en/docs/migration
Функция start заменяется на OnStart только в скриптах. В советниках и индикаторах ее следует переименовать в OnTick и OnCalculate соответственно. Код, который должен выполняться во время работы программы mql5, должен находиться в этих трех функциях:
#Время - Открыто
С тех пор как я начал изучать вопрос о времени / часах для моего советника. Я вижу, что авторы используют start() JUST в индикаторе для этого.
Я использую OnTimer() и OnTick() в своем советнике, я не хотел бы использовать start().
Поэтому мне просто нужно убедиться / узнать, какая специальная функция будет лучше для функции времени и часов?
Я продолжу исследования по этому вопросу 10 часов спустя.
(примечание: я уже нашел несколько индикаторов времени и часов на странице Mql5.com Codebase - но я не люблю копировать и вставлять)
Любые хорошие комментарии, обмен форумами, ссылки и что-то еще было бы лучше для меня.
Заранее спасибо.
Используйте OnTimer().
Использование TimeLocal() даст лучший внешний вид, но не будет синхронизировано с часовым поясом брокера.
Использование TimeCurrent() будет синхронизировано с вашим брокером, но может отставать, а затем "прыгать" на секунды в зависимости от того, когда приходят тики. Этот пример продемонстрирует проблему:
int OnInit()
{
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
void OnTimer()
{
Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
}
#Таймер - Закрыто
Используйте OnTimer().
Использование TimeLocal() даст лучший внешний вид, но не будет синхронизировано с часовым поясом брокера.
Использование TimeCurrent() будет синхронизировано с вашим брокером, но может отставать и "прыгать" на секунды в зависимости от времени поступления тиков. Этот пример продемонстрирует проблему:
int OnInit()
{
EventSetTimer(1);
return(INIT_SUCCEEDED);
}
void OnTimer()
{
Comment(StringFormat("%s - Local\n%s - Broker",TimeToString(TimeLocal(),TIME_SECONDS),TimeToString(TimeCurrent(),TIME_SECONDS)));
}
Форум о трейдинге, автоматических торговых системах и тестировании торговых стратегий
советник - разные вопросы
honest_knave, 2016.11.30 01:28
ИМХО было бы лучше, если бы вы держали все расчеты лота вместе, а не разделяли их между OnChartEvent() и _lotCalc(). Одна функция, которая проверяет min / max / шаг и делает инкремент / декремент.
const long & lparam , // Parameter of type long event
const double & dparam , // Parameter of type double event
const string & sparam // Parameter of type string events
)
{
_lotCalc();
//-------Process Button---------------------------------------------------------|
if ( sparam == _btnLotMinus )
{
ObjectSetInteger( 0, sparam, OBJPROP_STATE, false );
_lotSize = fmax(_lotMin, _lotSize-_lotStep);
_calcUpdade( CALC_CHANGE_LOT );
printf( " | Lot: %.2f ", _lotSize );
return;
} //---if Close
// ...
}
void _lotCalc()
{
//---
_lotMin = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MIN );
_lotMax = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_MAX );
_lotStep = SymbolInfoDouble( _Symbol, SYMBOL_VOLUME_STEP );
//---
}
#Lot Step - ReOpen
@honest_knave- спасибо за вашу огромную помощь по поводу Lot Size и Lot Step.
Итак, мне просто нужно улучшить эту часть кода, чтобы когда "Размер лота >= (Шаг лота * 100)", шаг лота увеличивался на "Шаг лота * 100".
if(sparam==lotbuttonplus)
{
if(lotsize>=(lotstep*100))
{
lotstep=lotstep*100;
Print("lot step: ",lotstep);
}
lotmaxdivide=lotmax/lotmax *(lotvalue*10);
lotsize=fmin(lotmaxdivide,lotsize+(( ctrlfalse) ? lotstep*10 : lotstep));
// global variable
infoupdate();
printf("Lot: %.2f ",lotsize);
ObjectSetInteger(0,sparam,OBJPROP_STATE,false);
return;
}
Заранее спасибо.