Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 852

 

Non apre uno scambio, dov'è la colpa?

iRSI_handle=iRSI(NULL,0,15,PRICE_OPEN);

double iRSI_buf[];

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

if (iRSI_buf[0]>60)

trader.Buy(Lot);
 
Askr:

Non apre lo scambio, dov'è il bug?

Bug numero 1: su ogni tick si crea un NUOVO indicatore HANDL

Secca numero 2: (probabilmente) la variabile Lot ha un volume errato.

Difetto numero 3: (probabilmente) il tipo di riempimento dell'ordine per la classe CTrade non viene riempito.


In generale, cosa c'è nel log del terminale (o del tester)?

 
Kirill Belousov:

l'importo moltiplicato per la perdita in valuta dal 1 SL

E se la perdita è 1, in BO per esempio.

Ho messo i valori nella formula, nemmeno vicino allo stesso risultato.

Cosa c'è che non va?

double lot=1.0;
double koef_lot=2.0;
int seriya =15;
double depo=0.0;
depo=(lot*(koef_lot*seriya-1))/(koef_lot-1);
   Comment(" depo ",depo);
 
Vladimir Karputov:

Gap numero 1: su ogni tick si crea un NUOVO indicatore HANDL

Shoal numero 2: (probabilmente) la variabile Lot ha un volume errato.

Difetto numero 3: (probabilmente) il tipo di riempimento dell'ordine per la classe CTrade non viene riempito.


Comunque, cosa c'è nel log del terminale (o del tester)?

Questo codice sì era in onitics

ArraySetAsSeries(iRSI_buf,true);

CopyBuffer(iRSI_handle,0,0,20,iRSI_buf);

Spostato su onytics. Ho appena letto gli articoli qui - e ho capito che non c'è differenza per il lavoro, ma è meglio in onitiket. Ma in termini di chiarezza per me stesso, ero più conveniente fare tutto in 1 blocco, sono puramente per me stesso mentre risolvo i problemi che mi pongo (apprendimento).

Il problema era con il lotto - ho dovuto mettere non un lotto variabile - e la funzione returnlot (perché era una funzione per calcolare il lotto).

Ora ho trovato un errore nella funzione lotto - il lotto è calcolato con molti decimali e di conseguenza l'ordine non può essere aperto. Dobbiamo ridurre i caratteri inutili e lasciarne solo 2.

//параметры
input double      StartLot=0.1;
input double      StartEquityLot=10000;

//переменные
double KoefLotEQUITY;//разница эквити
double Lot;

//функция расчета текущего торгового лота
double LotF(double Lot)
{
KoefLotEQUITY=AccountInfoDouble(ACCOUNT_EQUITY)/ StartEquityLot;
Lot=StartLot*KoefLotEQUITY;
//функция минимального возможного лота
if (Lot<0.01)
{
Lot=0.01;
}

return(Lot);
} 

NormalizeDouble e DoubleToStr finora non può funzionare - scrive che la funzione non può essere inserito nella funzione, e sotto quando ho messo il loro lavoro con la funzione scrive errore - che non posso risolvere.


 
Askr:

Questo codice era in onitics.

Spostato in ontica. Ho appena letto gli articoli qui - e da loro ho capito che non c'è differenza per il lavoro, ma è meglio in ontiket. Ma in termini di chiarezza per me stesso, ero più conveniente fare tutto in 1 blocco, sono puramente per me stesso mentre risolvo i problemi che mi pongo (apprendimento).

Il problema era con il lotto - ho dovuto mettere non un lotto variabile - e la funzione returnlot (perché era una funzione per calcolare il lotto).

Ora ho trovato un errore nella funzione lotto - il lotto è calcolato con molti decimali e di conseguenza l'ordine non può essere aperto. Dobbiamo ridurre i caratteri inutili e lasciarne solo 2.

Quando incollo la funzione NormalizeDouble e DoubleToStr non posso ancora farlo, dice che la funzione non può essere inserita e sotto vedo degli errori che non posso correggere.


In MQL5 è necessario creare una maniglia dell'indicatore SOLO una volta e SOLO in OnInit. È un assioma. Non è possibile creare un indicatore di maniglia su ogni tick in OnTick - non è corretto.

La corretta normalizzazione del lotto è nella classe commerciale CSymbolInfo::NormalizePrice

 
Vladimir Karputov:

In MQL5 è necessario creare un manico indicatore SOLO una volta e SOLO in OnInit. È un assioma. Non è possibile creare un manico di indicatore su ogni tick in OnTick - questo è GIUSTO.

La corretta normalizzazione del lotto è nella classe commerciale CSymbolInfo::NormalizePrice

Sbagliato, non lo discuto. MA!!! Cosa cambierà se lo creiamo ad ogni spunta? Nemmeno il valore cambierà.

 
Alexey Viktorov:

Sbagliato, su questo non si discute. MA!!! Cosa cambia se si crea su ogni tick? Nemmeno il valore cambierà.

Qual è il punto? Solo un sacco di lavoro extra per la sceneggiatura, tutto qui.

 
Alexey Viktorov:

Sbagliato, su questo non ci piove. MA!!! Cosa cambia se si crea su ogni tick? Nemmeno il valore cambierà.

In un recente articolo ho mostrato che MQL5 combatte efficacemente le vestigia della codifica in stile MQL4 - creazione di maniglie ad ogni tick: la memoria non è sprecata, ma la velocità di funzionamento è diminuita almeno. Ma ripeto: la creazione di indicatori in MQL5 in stile MQL4 non è il metodo giusto. Se si passa a MQL5, significa che lo stile di programmazione deve essere ricostruito.

 
Konstantin Nikitin:

Qual è il punto? È solo un lavoro extra per la sceneggiatura, tutto qui.

Naturalmente non ha senso. Era una domanda così nascosta drubashke: perché assomigliare ai nevrastenici, che sono abbastanza qui come è, e accendere Caps Lock?

 

Cioè, il risultato è lo stesso, ma naturalmente l'esecuzione è senza senso e molto più impegnativa come ho capito da quello che è stato scritto.

Vorrei che avessero pensato di scriverlo nell'articolo, ma in generale è chiaro che non c'è motivo di fare la stessa cosa più volte.

Ma avevo l'obiettivo di scrivere per capire e lavorare in sé, non per ottimizzare - è dopo che ho contato.