¿Cómo codificar? - página 118

 

para CEHansen

Hola,

Dentro de que el para donde tomas las barras una a una tienes que usar la variable i en todas partes en lugar de Current. Current está sin inicializar por lo que es 0.

La forma más fácil de ver eso es poner dentro del for al principio esto:

Current = i;

Las flechas aparecerán. También no olvides usar un valor mayor para Sto_Lookback. Mabe 100,1000 o algo así.

P.D Usa para hacer el for así es mejor desde mi punto de vista.

for (int i = Sto_Lookback; i >0; i--){

...

}

Porque esta es la forma normal de "barras" comming 0 es el último. Esto le ahorraría de algunos otros trubles más tarde. (por ejemplo - repintado). Sólo un pensamiento.

Gracias,

Victor

 
 

Oscilador de volumen Klinger

Busqué esto, parece un indicador interesante.

Sin embargo, se basa en parte en el volumen, que no está realmente disponible en Forex.

Big Be

 

Error de modificación de orden 1

En mi backtesting sigo recibiendo el ocasional "OrderModify error1". Por lo que puedo entender, significa que no hay ningún cambio, es decir, los argumentos de OrderModify() son los mismos que los parámetros correspondientes de la orden modificada.

Esto puede deberse a un problema de doble comparación.

La pregunta es ¿cómo puedo resolver este problema?

Aquí está el área que creo que está causando el problema:

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;

continuar;

}

//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;

continuar;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Punto * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continuar;

}

}

}

} else {

//Cerrar

//+------------------------------------------------------------------+

//| Señal de inicio (salida de la venta)

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Señal Fin(Salir de la venta) ||||++ //++

//+------------------------------------------------------------------+

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;

continuar;

}

/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;

continuar;

}

}

}

//Trailing stop

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;

continuar;

}

}

}

}

}

}

 

Pregunta sobre el código

¿Qué significa i++ o i-- en la codificación?

Ej: for (int i=5; i>0; i--)

 
matrixebiz:
¿Qué significa i++ o i-- en la codificación? Por ejemplo: for (int i=5; i>0; i--)

Es la abreviatura en lenguajes basados en C para incrementar o decrementar una variable basada en números.

Por ejemplo, en Visual Basic tendrías que escribir

i = i + 1 para incrementar la variable i.

Sin embargo, en C puedes simplemente escribir i++.

Espero que esto ayude.

Hiachiever

 
hiachiever:
Es la abreviatura en lenguaje C para incrementar o decrementar una variable numérica.

Por ejemplo, en Visual Basic tendría que escribir

i = i + 1 para incrementar la variable i.

Sin embargo, en C puedes escribir simplemente i++.

Espero que esto te ayude.

Hiachiever

Gracias,

entonces si pongo if (int i=6; i>0; i++)

¿se hará un 'bucle' o se seguirá comprobando el valor hasta el máximo de 6? no estoy seguro de que sea correcto. ¿Y si uso i--? Por favor, aclare

 
matrixebiz:
Gracias,

así que si pongo si (int i=6; i>0; i++)

¿hará un bucle o seguirá comprobando el valor hasta 6 como máximo? no estoy seguro de que sea correcto. ¿Qué pasa si uso i--? Por favor, aclare

Matrixebiz,

si quieres empezar en 6 y volver a 0 entonces usa i--

(int i=6; i>0; i--)

Esto empezará en 6, disminuyendo en 1 en cada bucle mientras I > 0.

Si quieres incluir 0 entonces usa i>=0.

Saludos,

Hiachiever

 
hiachiever:
Matrixebiz,

si quieres empezar en 6 y volver a 0 entonces usa i--

(int i=6; i>0; i--)

Esto empezará en 6, decrementando en 1 en cada bucle mientras I > 0.

Si quieres incluir 0 entonces usa i>=0.

Saludos,

Hiachiever

Ok, entonces si pongo if (int i=6; i>0; i++)

entonces empezará en 6 y luego , empezará de nuevo incrementando 1, 2, 3 ... 6, ¿correcto?

 
matrixebiz:
Vale, entonces si pongo if (int i=6; i>0; i++) entonces empezará en 6 y luego , empezará de nuevo incrementando 1, 2, 3 ... 6, ¿correcto?

No es así, si lo que quieres hacer es terminar a las 6.

El código en este caso sería

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

Esto comenzará en 1 y terminará en 6 incrementando en 1 en cada bucle.

Saludos,

Hiachiever

Razón de la queja: