Как кодировать? - страница 118

 

для 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--)

 
matrixebiz:
Что означает i++ или i-- в кодировании? Например: for (int i=5; i>0; i--)

В языке C это сокращение для увеличения или уменьшения переменной, основанной на числе.

Например, в Visual Basic вы должны были бы написать.

i = i + 1, чтобы увеличить переменную i.

Однако в языке C вы можете просто написать i++.

Надеюсь, это поможет.

Hiachiever

 
hiachiever:
Это сокращение в языке C для увеличения или уменьшения переменной, основанной на числе.

Например, в Visual Basic вы должны были бы написать.

i = i + 1, чтобы увеличить переменную i.

Однако в C вы можете просто написать i++.

Надеюсь, это поможет.

Hiachiever

Спасибо,

Если я напишу if (int i=6; i>0; i++)

это будет "зацикливаться" или продолжать проверять значение до 6 максимум? Не уверен, что это правильно. А если я использую i--? Пожалуйста, поясните

 
matrixebiz:
Спасибо,

поэтому если я поставлю 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

 
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, правильно?

 
matrixebiz:
Хорошо, если я напишу if (int i=6; i>0; i++), то он начнет с 6, затем начнет сначала, увеличивая на 1, 2, 3 ... 6, правильно?

Нет, если то, что вы хотите сделать, это завершить в 6.

Код в этом случае будет выглядеть следующим образом

For (int i=1; i<=6; i++)

Он будет начинаться с 1 и заканчиваться на 6, увеличиваясь на 1 в каждом цикле.

Спасибо,

Hiachiever