Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
для CEHansen
Привет,
В том месте, где вы берете бары один за другим, вы должны везде использовать переменную i вместо Current. Current неинициализирована, поэтому она равна 0.
Самый простой способ увидеть это - поместить внутри for в самом начале следующее:
Current = i;
Появятся стрелки. Также не забудьте использовать большее значение для Sto_Lookback. Например, 100,1000 или что-то в этом роде.
P.S Используйте для создания for вот так, это лучше с моей точки зрения.
for (int i = Sto_Lookback; i >0; i--){
...
}
Потому что это нормальный способ "баров", когда 0 - последний. Это избавит вас от некоторых других проблем в дальнейшем. (например, от перерисовки). Просто мысль.
Спасибо,
Виктор
Осциллятор объема Клингера
Я просмотрел этот индикатор, он выглядит интересным.
Однако он частично полагается на объем, что не совсем доступно на Forex.
Big Be
Ошибка модификации ордера 1
При бэктестинге я постоянно получаю ошибку "OrderModify error1". Насколько я могу понять, это означает, что изменений нет, т.е. аргументы OrderModify() те же, что и соответствующие параметры модифицированного ордера.
Это может быть связано с проблемой двойного сравнения.
Вопрос в том, как я могу решить эту проблему?
Вот область, которая, по моему мнению, вызывает проблему:
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Трейлинг-стоп
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) | Сигнал на продажу.
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Сигнал End(Exit Sell)|
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Трейлинг-стоп
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
Вопрос о коде
Что означает i++ или i-- в кодировании?
Например: for (int i=5; i>0; i--)
Что означает i++ или i-- в кодировании? Например: for (int i=5; i>0; i--)
В языке C это сокращение для увеличения или уменьшения переменной, основанной на числе.
Например, в Visual Basic вы должны были бы написать.
i = i + 1, чтобы увеличить переменную i.
Однако в языке C вы можете просто написать i++.
Надеюсь, это поможет.
Hiachiever
Это сокращение в языке C для увеличения или уменьшения переменной, основанной на числе.
Например, в Visual Basic вы должны были бы написать.
i = i + 1, чтобы увеличить переменную i.
Однако в C вы можете просто написать i++.
Надеюсь, это поможет.
HiachieverСпасибо,
Если я напишу if (int i=6; i>0; i++)
это будет "зацикливаться" или продолжать проверять значение до 6 максимум? Не уверен, что это правильно. А если я использую i--? Пожалуйста, поясните
Спасибо,
поэтому если я поставлю if (int i=6; i>0; i++)
он будет "зацикливаться" или продолжать проверять значение до 6 максимум? Не уверен, что это правильно. Что если я использую i--? Пожалуйста, пояснитеMatrixebiz,
если вы хотите начать с 6 и вернуться к 0, то используйте i--.
(int i=6; i>0; i--)
Это начнет с 6, уменьшаясь на 1 в каждом цикле до тех пор, пока I > 0.
Если вы хотите включить 0, то используйте i>=0.
Будьте здоровы,
Hiachiever
Matrixebiz,
если вы хотите начать с 6 и вернуться к 0, то используйте i--.
(int i=6; i>0; i--)
Это начнет с 6, уменьшаясь на 1 в каждом цикле до тех пор, пока I > 0.
Если вы хотите включить 0, то используйте i>=0.
Ваше здоровье,
HiachieverХорошо, если я поставлю if (int i=6; i>0; i++)
то он начнет с 6, затем начнет увеличиваться на 1, 2, 3... 6, правильно?
Хорошо, если я напишу if (int i=6; i>0; i++), то он начнет с 6, затем начнет сначала, увеличивая на 1, 2, 3 ... 6, правильно?
Нет, если то, что вы хотите сделать, это завершить в 6.
Код в этом случае будет выглядеть следующим образом
For (int i=1; i<=6; i++)
Он будет начинаться с 1 и заканчиваться на 6, увеличиваясь на 1 в каждом цикле.
Спасибо,
Hiachiever