Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 22

 
Artyom Trishkin:

О! Grazie. Non me ne sono accorto io stesso al mattino... Però c'è ancora bisogno di fare un controllo per riempire gli array. In Quatermass non ha incontrato, e in cinque molto spesso non compilato i dati la prima volta a causa della mancanza di dati storici.

ZS. Dovresti dormire di più - i tuoi pensieri lavoreranno in quella direzione.

Beh, puoi metterlo in un ciclo

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

o anche

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

per copiare esattamente l'importo richiesto.


ps; Mentre andavo a versare il tè, ho avuto un'altra idea, usare CopyRates() e un array di strutture MqlRates rates[] ma sono troppo pigro per riscrivere qualcosa.

 
Alexey Viktorov:

Beh, potresti anche metterlo in un ciclo

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

o anche

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

per copiare esattamente il numero di copie richieste.


ps; Mentre bevevo il tè, ho avuto un'altra idea - usare CopyRates() e array di strutture MqlRates rates[], ma sono troppo pigro per riscriverlo.

Non è il modo in cui ho proposto?
 
giannis1386:
Aiutami a controllare altre Condizioni di vendita.
int start()
{
//+--------------------------------------------------------------------+
//|   -= stop loss в без убыток =-                                      |
//+--------------------------------------------------------------------+
bool   result;
double stop;
int    cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}

Ha una strana logica. Ma anche se non si guarda alla strana logica, allora:

Qui avete due condizioni per comprare, e tutto il resto per vendere.

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
 
Artyom Trishkin:

La tua logica è strana. Ma anche se non si guarda alla strana logica, allora:

Qui avete due condizioni controllate per Buy, e tutto il resto per Sell

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;

Ho provato a collegareslevel=OrderStopLoss()>Ask+Point*TS per vendere;

Ma siccome non sono un'esperta di programmazione, non è venuto fuori niente di utile. Ho curiosato nei forum per una settimana.

Perché questa strana logica?) Il codice non è interamente mio.

 
giannis1386:

Ho provato ad aggiungereslevel=OrderStopLoss()>Ask+Point*TS;

Ho frugato nei forum per una settimana e tutti i miei tentativi sono finiti con il Sell Stop che si muoveva insieme al prezzo.

Il codice non è tutto mio, l'ho rielaborato come meglio potevo.

Perché non scrivi prima le condizioni sotto le quali i Sell e i Buy stop dovrebbero essere spostati?

E poi, dopo averci pensato, scrivete nel vostro codice ciò che è scritto sulla scheda.

 
Artyom Trishkin:

E prima di tutto, scrivete su un pezzo di carta con una matita le condizioni in cui è necessario spostare lo stop Buy e lo stop Sell.

E poi, dopo averci pensato, scrivete nel codice ciò che è scritto sul pezzo di carta.

slevel=OrderStopLoss()>Ask+Point*TS; ecco come appare per una posizione di vendita.
 
giannis1386:
slevel=OrderStopLoss()>Ask+Point*TS; bene, sembra essere quello giusto o è sbagliato? Sono nuovo in questo.

Capite almeno cosa c'è scritto in questa condizione? Questa è un'assegnazione di zero o uno a una variabile di tipo double

Cosa vuoi ottenere?

 
Artyom Trishkin:

Capite almeno cosa c'è scritto in questa condizione? È un'assegnazione di zero o uno a una variabile di tipo double

Cosa vuoi ottenere?

Ecco cosa ho corretto.

Controllare la condizione - non muovere SL avanti e indietro, ma solo in una direzione.

Per esempio, per un ordine BUY, la vostra formula

OrderStopLoss()<bid-point*TrailingStop

Usando questo esempio, l'ho fatto per Sel.

 
giannis1386:

Ecco cosa ho letto.

la condizione di controllo - non spostare SL avanti e indietro, ma solo in una direzione

Per esempio, per un ordine BUY, la vostra formula

OrderStopLoss()<bid-point*TrailingStop

Usando questo esempio, l'ho incollato per una posizione Sell.

Quindi vi serve così:

in russo... se l'ordine stop è inferiore al prezzo Bid meno la distanza trailing stop, allora ... la tua azione

E si assegna alla variabile il risultato di questa espressione logica, cioè zero o uno.

 
Artyom Trishkin:

Quindi avete bisogno di questo:

in russo... se l'ordine stop è inferiore al prezzo Bid meno la distanza trailing stop, allora ... le vostre azioni

E si assegna alla variabile il risultato di questa espressione booleana - cioè zero o uno.

Sono completamente confuso.

double blevel=OrderStopLoss()<Bid-Point*TS; funziona per me. SL insegue il prezzo solo in profitto.

double slevel=OrderStopLoss()>Ask+Point*TS; Non so come aggiungere questo a else

non sono un bool.