Aiuto per la codifica - pagina 212

 
zoroxzyad:
ican usare lwma così se voglio che il periodo sia 30 in scafo che mv dovrei mettere nel grafico due ma o solo uno con howmuch periodo iam non bravo a matematica e grazie molto molto uomo sul vostro sforzo

zoroxzyad

Non puoi usare solo la media mobile. È necessario utilizzare la formula dal post prima

 

C'è già un manuale per il nuovo metatrader 4?

O ne faranno mai uno?

 
techmac:
C'è già un manuale per il nuovo metatrader 4? O ne faranno mai uno?

Non che io sappia. Suppongo che ce ne sarà qualcuno (ad un certo punto dello sviluppo)

 

Mladen, in allegato c'è un indicatore che hai modificato per visualizzare i segnali di crossover sul grafico principale.

Questo codice è della nuova versione.

arrUp[CB] = EMPTY_VALUE;

arrDn[CB] = EMPTY_VALUE;

state[CB] = state[CB+1];

if (TrendBuffer[CB]>LoBuffer[CB]) state[CB] = 1;

if (TrendBuffer[CB]<LoBuffer[CB]) state[CB] = -1;

if (state[CB]!=state[CB+1])

{

if (state[CB]== 1) arrUp[CB] = Low[CB] -iATR(NULL,0,10,CB)/2.0;

if (state[CB]==-1) arrDn[CB] = High[CB]+iATR(NULL,0,10,CB)/2.0;

}

C'è un modo semplice per spiegare come questo codice inserisce i segnali?

Grazie.

 
michaelB:
Mladen, in allegato c'è un indicatore che hai modificato per visualizzare i segnali di crossover sul grafico principale.

Questo codice è della nuova versione.

arrUp[CB] = EMPTY_VALUE;

arrDn[CB] = EMPTY_VALUE;

state[CB] = state[CB+1];

if (TrendBuffer[CB]>LoBuffer[CB]) state[CB] = 1;

if (TrendBuffer[CB]<LoBuffer[CB]) state[CB] = -1;

if (state[CB]!=state[CB+1])

{

if (state[CB]== 1) arrUp[CB] = Low[CB] -iATR(NULL,0,10,CB)/2.0;

if (state[CB]==-1) arrDn[CB] = High[CB]+iATR(NULL,0,10,CB)/2.0;

}

C'è un modo semplice per spiegare come questo codice inserisce i segnali?

Grazie.

Michael

Cerca un incrocio di valori in due buffer: TrendBuffer e LoBuffer. Segna qual è lo stato attuale dei due: se TrendBuffer > LoBuffer imposta lo stato a 1 e se TrendBuffer < LoBuffer imposta lo stato a -1.

Ora, quando lo stato della barra corrente è diverso dallo stato della barra precedente, significa che c'è un incrocio. E poi disegna una freccia sul grafico

[Deleted]  

Anche insegnante fastidioso ancora una volta, si prega di mettere questo indicatore convertito in indicatori MT4, grazie!

barre di colore_hlc.mq5

File:
 
mladen:
Michael

Cerca un incrocio di valori in due buffer: TrendBuffer e LoBuffer. Segna qual è lo stato attuale dei due: se TrendBuffer > LoBuffer imposta lo stato a 1 e se TrendBuffer < LoBuffer imposta lo stato a -1.

Ora, quando lo stato della barra corrente è diverso da quello della barra precedente, significa che c'è un cross. E poi disegna una freccia sul grafico

Ok, questo spiega TrendBuffer e LoBuffer.

Ma come funzionano arrUp e arrDn?

Perché i segnali appaiono su certe candele e non su tutte.

Grazie ancora.

 
michaelB:
OK, questo spiega TrendBuffer e LoBuffer.

Ma come funzionano arrUp e arrDn?

Perché i segnali appaiono su certe candele e non su tutte le candele.

Grazie ancora.

michael

immagina una sequenza come questa (1 quando TrendBuffer > LoBuffer, -1 quando TrendBuffer < LoBuffer)

11111111-1-1-1-1-1-1-1-111111111

Le frecce devono essere disegnate solo quando 1 diventa -1 o quando -1 diventa 1 (quando lo "stato" cambia). Ecco perché c'è una linea che controlla questo (questa linea: if (state[CB] !=state[CB+1]) ). Così, quando lo stato cambia, la freccia viene disegnata, altrimenti la freccia non ha bisogno di essere disegnata

 

Hey mladen,

spero che tu abbia tempo così vicino alla fine dell'anno.

Il codice qui sotto è in relazione con l'ultima domanda che mi è stata fatta. Scia 0.8 pips per un ordine dopo l'obiettivo di 2 pips in più.

Ma come posso cambiarlo in modo che controlli tutti gli ordini e li segua individualmente?

Grazie mille! Ottimo lavoro che fai qui.

int start()

{

//----

if (OrdersTotal() == 0) {

isStopLoss = false;

}

for(int i=0; i<=OrdersTotal(); i++) {

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

continue;

}

if(OrdersTotal() == 0) {

continue;

}

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(isStopLoss == true) {

if(OrderType() == OP_BUY) {

if(iClose(Symbol(), 0, 0) >= (OrderOpenPrice()+inProfitStopLoss*Point)) { // Zieht bei 2.0 Pips nach! - 200 = 2.0 Pips

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) >= (lastStopLoss+trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss+trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+inProfitStopLoss*Point,0,0,0);

if(OrderStopLoss() >= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

} else if(OrderType() == OP_SELL) {

if(iClose(Symbol(), 0, 0) <= (OrderOpenPrice()-inProfitStopLoss*Point)) {

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) <= (lastStopLoss-trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss-trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-inProfitStopLoss*Point,0,0,0); // 200 ursprünglich

if(OrderStopLoss() <= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

}

lastStopLoss = OrderStopLoss();

continue;

}

if(OrderType() == OP_BUY) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-initialStopLoss*Point,0,0,0);

} else if(OrderType() == OP_SELL) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+initialStopLoss*Point,0,0,0);

}

lastStopLoss = OrderStopLoss();

}

//----

return(0);

}
 
arroganzmaschine:
Ciao mladen,

spero che tu abbia tempo così vicino alla fine dell'anno.

Il codice qui sotto è in relazione con l'ultima domanda che mi è stata fatta. Segue 0.8 pips per un ordine dopo l'obiettivo di 2 pips in più.

Ma come posso cambiarlo in modo che controlli tutti gli ordini e li segua individualmente?

Grazie mille! Ottimo lavoro che fai qui.

int start()

{

//----

if (OrdersTotal() == 0) {

isStopLoss = false;

}

for(int i=0; i<=OrdersTotal(); i++) {

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

continue;

}

if(OrdersTotal() == 0) {

continue;

}

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(isStopLoss == true) {

if(OrderType() == OP_BUY) {

if(iClose(Symbol(), 0, 0) >= (OrderOpenPrice()+inProfitStopLoss*Point)) { // Zieht bei 2.0 Pips nach! - 200 = 2.0 Pips

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) >= (lastStopLoss+trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss+trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+inProfitStopLoss*Point,0,0,0);

if(OrderStopLoss() >= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

} else if(OrderType() == OP_SELL) {

if(iClose(Symbol(), 0, 0) <= (OrderOpenPrice()-inProfitStopLoss*Point)) {

if(isTrailing == true) {

if(iClose(Symbol(), 0, 0) <= (lastStopLoss-trailingStop)) {

OrderModify(OrderTicket(), OrderOpenPrice(), (lastStopLoss-trailingStop), 0,0,0);

lastStopLoss = OrderStopLoss();

//isTrailing = true;

continue;

}

}

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-inProfitStopLoss*Point,0,0,0); // 200 ursprünglich

if(OrderStopLoss() <= OrderOpenPrice()) {

isTrailing = true;

}

lastStopLoss = OrderStopLoss();

}

}

lastStopLoss = OrderStopLoss();

continue;

}

if(OrderType() == OP_BUY) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-initialStopLoss*Point,0,0,0);

} else if(OrderType() == OP_SELL) {

isStopLoss = true;

OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+initialStopLoss*Point,0,0,0);

}

lastStopLoss = OrderStopLoss();

}

//----

return(0);

}

arroganzmaschine

Controlla il modo in cui vengono gestiti i trailing stop nell'EA da questo post: https: //www.mql5.com/en/forum/181334. Penso che ti possa aiutare dato che ha tutti gli elementi (compreso il controllo degli errori) che sono necessari per gestire le perdite di trailing stop