Come codificare? - pagina 118

 

per CEHansen

Ciao,

All'interno del for dove prendi le barre una per una devi usare ovunque la variabile i invece di Current. Current non è inizializzato quindi è 0.

Il modo più semplice per vederlo è mettere dentro il for all'inizio questo:

Current = i;

Le frecce appariranno. Inoltre non dimenticate di usare un valore più grande per Sto_Lookback. Mabe 100,1000 o qualcosa del genere.

P.S. Usare per fare il for come questo è meglio dal mio punto di vista.

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

...

}

Perché questo è il modo normale delle "barre" che arrivano a 0 è l'ultima. Vi salverebbe di alcuni altri trubles più tardi. (per esempio - ridipingere). Solo un pensiero.

Grazie,

Victor

 
 

Oscillatore di volume Klinger

Ho cercato questo, sembra un indicatore interessante.

Tuttavia si basa in parte sul volume, che non è realmente disponibile nel Forex.

Grande essere

 

Errore di modifica dell'ordine 1

Nel mio backtesting continuo a ricevere occasionalmente "OrderModify error1". Da quello che posso capire significa che non c'è nessun cambiamento, cioè gli argomenti di OrderModify() sono gli stessi dei parametri corrispondenti dell'ordine modificato.

Questo potrebbe essere dovuto a un problema di doppio confronto.

La domanda è come potrei risolvere questo problema?

Ecco l'area che credo stia causando il 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 = Falso;

continuare;

}

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

continua;

}

}

}

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

continua;

}

}

}

} else {

//Chiudi

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

//| Segnale Inizio(Esci Vendi) |

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

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

//| Segnale Fine(Esci Vendi) |

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

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 = Falso;

continuare;

}

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

continua;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

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

if((OrderStopLoss() > (Ask + Punto * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continuare;

}

}

}

}

}

}

 

Domanda sul codice

Cosa significa i++ o i-- nella codifica?

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

 
matrixebiz:
Cosa significa i++ o i-- nella codifica? Per esempio: for (int i=5; i>0; i--)

È un'abbreviazione nei linguaggi basati su C per incrementare o decrementare una variabile basata su un numero.

Per esempio in Visual Basic dovreste scrivere.

i = i + 1 per incrementare la variabile i.

Tuttavia, in C puoi semplicemente scrivere i++.

Spero che questo aiuti.

Hiachiever

 
hiachiever:
È un'abbreviazione nei linguaggi basati sul C per incrementare o decrementare una variabile basata su un numero.

Per esempio in Visual Basic dovreste scrivere.

i = i + 1 per incrementare la variabile i.

Tuttavia, in C puoi semplicemente scrivere i++.

Spero che questo aiuti.

Hiachiever

Grazie,

quindi se metto if (int i=6; i>0; i++)

sarà 'loop' o continuare a controllare il valore fino a 6 max? non sono sicuro che sia giusto. E se uso i--? Si prega di chiarire

 
matrixebiz:
Grazie,

quindi se metto if (int i=6; i>0; i++)

sarà 'loop' o continuerà a controllare il valore fino a 6 max? non sono sicuro che sia giusto. Cosa succede se uso i--? Si prega di chiarire

Matrixebiz,

se vuoi iniziare da 6 e tornare a 0 allora usa i--

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

Questo inizierà a 6, diminuirà di 1 ad ogni ciclo per tutto il tempo in cui I > 0.

Se volete includere 0 allora usate i>=0.

Grazie,

Hiachiever

 
hiachiever:
Matrixebiz,

se volete iniziare da 6 e tornare a 0 allora usate i--

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

Questo inizierà da 6, decrementerà di 1 ad ogni ciclo per tutto il tempo in cui I > 0.

Se volete includere 0 allora usate i>=0.

Grazie,

Hiachiever

Ok, quindi se metto if (int i=6; i>0; i++)

allora inizierà da 6 poi, ricomincerà ad incrementare 1, 2, 3 ... 6, giusto?

 
matrixebiz:
Ok, quindi se metto if (int i=6; i>0; i++) allora inizierà a 6 e poi ricomincerà ad incrementare di 1, 2, 3 ... 6, giusto?

Non proprio se quello che volete fare è finire a 6.

Il codice in questo caso sarebbe

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

Questo inizierà a 1 e finirà a 6 incrementando di 1 ad ogni ciclo.

Grazie,

Hiachiever