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

 
Tsaryoff5614:

Buon pomeriggio signori programmatori!!!

Per favore aiutate un principiante con una funzione.

La funzione conta il profitto totale per storia.

Il problema è che funziona per un broker e non vuole funzionare per un altro.

Funziona su Hercic ma non su RoboForex. Ho un conto ECN su RoboForex.

Non so quale sia il problema. Ecco il codice:

doppio ultima perdita()

{

int typ = -1,cnt = 0;

doppio lastloss = 0;

for(int i = OrdersHistoryTotal()-1; i>=0; i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)

{

if(cnt == 0) typ = OrderType();

if(cnt > 0 && OrderType()!= typ) break;

lastlos += OrderProfit() + + OrderSwap() + OrderCommission();

cnt++;

}

}

}

return(lastlos);

}

Mi chiedo se il compilatore non imprechi a questa linea?

lastlos += OrderProfit() + + OrderSwap() + OrderCommission();

Forse uno + deve essere rimosso, per funzionare correttamente?

E perché aggiungete swap e commissioni ai profitti? Anche se
OrderProfit()

Potrebbe essere anche negativo...

E di che tipo di profitto totale stiamo parlando se state elaborando solo 1 o pochi ordini corrispondenti ma non tutti?

Il prossimo:

 if(cnt > 0 && OrderType()!= typ) break;

arresto del ciclo.

 
MakarFX:

1)Ad alta velocità o se non su ticks nel tester chiuderà al primo prezzo disponibile.

2) Avete un grande aumento in corso e con un grande lotto 1 punto può essere più del livello ammissibile.

3)Non capisco cosa vuoi, di cosa hai bisogno per tracciare se l'azzeramento dopo ogni trade?

3) Non capisco cosa vuoi tracciare se azzeri dopo ogni scambio?

Sto parlando di tracciare il profitto/perdita "dentro" ogni trade, cioè, mentre il prezzo è "in bilico" tra stop e take, cambia anche l'ammontare del profitto e della perdita del trade corrente. Spesso succede che il prezzo arriva alla zona di profitto ma non raggiunge il punto di presa - si gira e l'affare viene chiuso allo stop. Ho bisogno di tracciare i profitti e le perdite (in denaro) per poterli fissare tempestivamente senza spostare uno stop e un take, cioè senza rompere i parametri impostati di take e stop. Questo è rilevante per i grandi lotti con un Martin abilitato.

Quando un affare viene chiuso - il tracciamento si ferma e ricomincia per un nuovo affare.

 
законопослушный гражданин:

3) Non capisco cosa vuoi tracciare se azzeri dopo ogni scambio?

Sto parlando di tracciare il profitto/perdita "dentro" ogni trade, cioè mentre il prezzo "ondeggia" tra lo stop e il take, l'ammontare del profitto e della perdita del trade corrente cambia. Spesso succede che il prezzo arriva alla zona di profitto ma non raggiunge il punto di presa - si gira e l'affare viene chiuso allo stop. Ho bisogno di tracciare i profitti e le perdite (in denaro) per poterli fissare tempestivamente senza spostare uno stop e un take, cioè senza rompere i parametri impostati di take e stop. Questo è rilevante per i grandi lotti con un Martin abilitato.

Quando un trade viene chiuso, il tracking si ferma e ricomincia per un nuovo trade.

Dovete solo specificare i parametri di profitto e perdita meno stoploss e takeprofit, cioè

se TakeProfit è 200 pip 0,1 lotto, allora il profitto è di $20, impostare il livello di profitto di $15 e il trade si chiuderà prima

 
Mihail Matkovskij:

E perché aggiungete lo swap con commissione al profitto? Con
OrderProfit()

può anche essere negativo...

Grazie per questo, anche io ho fatto questa cosa stupida

 
MakarFX:

Tutto quello che dovete fare è specificare i parametri di profitto e perdita meno stoploss e takeprofit, cioè

Se TakeProfit è 200 pips 0.1 lot, allora il profitto è $20, impostate il livello di profitto a $15 e il trade si chiuderà prima


Ok, grazie, ci penserò e lo eseguirò nel tester.

 
Hai un link a una funzione che calcola i profitti in base alla cronologia degli ordini?
 

Sto chiedendo aiuto alla comunità...
Come dichiarare e creare oggetti globali MQL5 correttamente?

Se lo faccio in questo modo

int OnInit()
{
   CIsNewBar* NB_M1=new CIsNewBar(_Symbol,PERIOD_M1);  // Эта строка потом будет в цикле для разных символов
}

void OnTick()
{
    if (NB_M1.IsNewBar())  // (1) Если появился новый бар M1
        {....}
    ......
}

Il compilatore si lamenta della linea in OnTick(): 'NB_M1' - identificatore non dichiarato, che è logico, perché una variabile locale è creata in OnInit().

Se inserite la dichiarazione globale prima di OnInit():

CIsNewBar* NB_M1;

si compila senza errori e l'esperto funziona. Sembra che l'oggetto sia creato due volte - durante la dichiarazione globale e in OnInit().
Ma ilcompilatore ha questoavvertimento

la dichiarazione di 'NB_M1' nasconde la variabile globale -> per linea in OnInit()

vedere la dichiarazione precedente di 'NB_M1'

Significa che una variabile locale (all'interno di una funzione) viene creata in OnInit() che nasconde una variabile globale con lo stesso nome?
E se è così, come può questa variabile locale essere "vista" da un'altra funzione, OnTick() ?


 
MakarFX:

Grazie per questo, anche io ho fatto questa stupidaggine.

Makar, prima facevi la cosa giusta e ora vuoi fare la cosa stupida...

Ripensate alla vostra quinta elementare di matematica o giù di lì. Quanto è (-3)-(-7) e quanto è (-3)+(-7)?

È difficile controllare con una calcolatrice, Excell per aiutarvi.


 
Mihail Matkovskij:
Salve. Conoscete qualche libreria disponibile in MQL per scrivere strutture di dati in un file e caricarle successivamente? Idealmente una libreria che lavora con il formato json, parserjson, ecc.

Non so come dirvi di leggere la documentazione. Se l'hai letto e la funzione standard non è adatta per qualche motivo, avresti dovuto dirlo subito...

 
Alexey Viktorov:

Makar, prima facevi la cosa giusta e ora vuoi fare la cosa stupida...

Ripensate alla vostra quinta elementare di matematica o giù di lì. Quanto è (-3)-(-7) e quanto è (-3)+(-7)?

È difficile controllare con una calcolatrice, Excell per aiutarvi.


Sì, grazie. Sono saltato alle conclusioni. Ho capito bene)