Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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--)
¿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
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.
HiachieverGracias,
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
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, aclareMatrixebiz,
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
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,
HiachieverOk, 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?
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