Судя по Вашему алгоритму Вы находите первую попавшуюся в истории сделку типа BUY и пытаетесь модернизировать на ее основе некоторые переменные. Можно было бы объединить присвоение новых значений под знаком профита выбранного ордера:
Например: if (OrderProfit()>=0) {Lots_BUY=Lot_size; TakeProfit_BUY=TakeProfit_BUY-Increase_take; StopLoss_BUY=StopLoss_BUY-Increase_stop; TrailingStop=90; }
else {Lots_BUY=Lots_BUY*Multi_lot; TakeProfit_BUY=TakeProfit_BUY+Increase_take; StopLoss_BUY=StopLoss_BUY+Increase_stop; TrailingStop=Trailing; }
if (Lots_BUY>Max_Lot) Lots_BUY=Max_Lot;
Как то так...
не понял.. что за молчок?
А чего тут сказать - вариант мартина. Непонятно, зачем проходить по всем историческим ордерам и на основе их профита вычислять лот, сл и тп. Ну ладно, это задумка автора, не мне судить
Ошибка в том, что если будут постоянно идти профтные сделки, сл и тп рискуют стать отрицательными
if(OrderProfit()>0) TakeProfit_BUY=TakeProfit_BUY-Increase_take; if(OrderProfit()>0) StopLoss_BUY=StopLoss_BUY-Increase_stop;
И еще, профит надо вычислять полностью
double profit = OrderProfit() + OrderSwap() - OrderCommission();
А чего тут сказать - вариант мартина. Непонятно, зачем проходить по всем историческим ордерам и на основе их профита вычислять лот, сл и тп. Ну ладно, это задумка автора, не мне судить
Ошибка в том, что если будут постоянно идти профтные сделки, сл и тп рискуют стать отрицательными
И еще, профит надо вычислять полностью
И еще, профит надо вычислять полностью. Только правильно считать надо.
double profit = OrderProfit() + OrderSwap() + OrderCommission();
И еще, профит надо вычислять полностью. Только правильно считать надо.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые профи, проверьте код. В зависимости как закрывается сделка (бай) - меняется Лот, размер Тейкпрофита, Трейлинстопа и Стоплосса. Есть синтактические ошибки, не влияющие на работоспособность.
int i=OrdersHistoryTotal()-1;
while(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==Symbol()&& OrderType() == OP_BUY )
{
if(OrderProfit()<0) Lots_BUY=Lots_BUY*Multi_lot;
if (Lots_BUY>Max_Lot) Lots_BUY=Max_Lot;
if(OrderProfit()<0) TakeProfit_BUY=TakeProfit_BUY+Increase_take;
if(OrderProfit()<0) StopLoss_BUY=StopLoss_BUY+Increase_stop;
if(OrderProfit()>0) Lots_BUY=Lot_size;
if(OrderProfit()>0) TakeProfit_BUY=TakeProfit_BUY-Increase_take;
if(OrderProfit()>0) StopLoss_BUY=StopLoss_BUY-Increase_stop;
if(OrderProfit()<0) TrailingStop=Trailing;
if(OrderProfit()>0) TrailingStop=90;
break;
}
i--;
}