[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 22

 
skyjet:

Ciao, il mio obiettivo è quello di trasferire l'indicatore creando una funzione nell'EA.

Il primo passo, che è la creazione della funzione, è fatto. Ma il prossimo - i test - non funziona.

L'indicatore disegna i canali. Ha 4 buffer e molte variabili. Ho messo tutto nella funzione.

Ma quando creo un Expert Advisor di prova per assicurarmi della precisione del suo funzionamento confrontando l'indicatore e la mia funzione, non posso ottenere la compilazione.

Errori costanti di variabili esterne, che non c'erano quando ho creato la funzione, sono spuntati nell'EA.

Per favore, datemi qualche consiglio o un link a un esempio. Ho usato gli articoli di GODZILLA, ma i suoi esempi sono diversi dai miei.

Lo schema è più o meno il seguente:

  • trasferire tutto ciò che si trovava in indicator init() in una funzione separata, per esempio, fInit_Indicator() e scriverlo in init() dell'EA, ricordandosi di rimuovere dal codice tutto ciò che riguarda l'inizializzazione dei buffer degli indicatori.
  • copiare tutte le variabili globali dell'indicatore e metterle nelle variabili globali dell'EA. Non dimenticate di definire la dimensione dei buffer degli indicatori quando sono dichiarati nell'EA. Qualcosa come gd_Buf1[100], gd_Buf2[100] ecc. Penso che 100 valori saranno sufficienti per voi.
  • rinominare la funzione start() dell'indicatore, per esempio, fMyIndicator() e metterla nella funzione start() dell'EA prima del codice di apertura dell'ordine (per prendere una decisione).
  • Inoltre, non dimenticate che il buffer indicatore è diverso dal buffer "non indicatore". Ci sono diverse soluzioni per questo:
  • quando arriva una nuova barra, tutti i dati nell'array "non-indicatore" vengono spostati, liberando l'indice 0, dove viene collocato il nuovo valore calcolato.
  • Di nuovo, quando arriva una nuova barra, ricalcola l'intero "array di non indicatori".

Provate - non è difficile.

 
999666:
Aiutatemi a scrivere una condizione che faccia sì che l'EA moltiplichi il lotto per due volte dopo aver aperto n ordini
if (MyOrders >= n) Lots *= 2;
 

Buon pomeriggio!

Sto ancora capendo le cose con gli array.

Ho bisogno di caricare i valori del numero di punti nell'array ad ogni nuovo tick.

Ladimensione dell'array sarà diversa ogni volta. Cosa dovrei fare in questo caso, usare ArreyResize su ogni iterazione del ciclo?

 

Buon pomeriggio, a proposito degli array.

c'è una cella di questo tipo

12345,p,fgh,2011-01-01,55,66

come posso ottenerne 55?

Grazie.

 

Se l'array è eterogeneo, probabilmente dovreste convertire tutti gli elementi in tipo stringa e poi cercare quello richiesto usando

StringFinde(https://www.mql5.com/ru/forum/138609/page22#613148). Correggetemi se mi sbaglio.

 
TarasBY:

Non è utile: se non è difficile avere due condizioni if (LotConst_or_not) gd_200 = Lot;

else gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;

Sostituiscilo con un Expert Advisor che calcola non il saldo ma il numero di ordini aperti.

La risposta sarebbe molto apprezzata.

 
TarasBY: Non è utile: se non è difficile avere due condizioni if (LotConst_or_not) gd_200 = Lot;

else gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;

Sostituiscilo con un Expert Advisor che calcola non il saldo ma il numero di ordini aperti.

La risposta sarebbe molto apprezzata.


 
Snegovik:

Buon pomeriggio, a proposito degli array.

c'è una cella di questo tipo

12345,p,fgh,2011-01-01,55,66

come posso ottenerne 55?

Grazie.


https://book.mql4.com/ru/variables/arrays
 
999666:
Aiutatemi a scrivere una condizione che faccia sì che l'EA moltiplichi il lotto per due volte dopo che sono stati aperti n ordini
Se volete aprire i prossimi (4, ecc.) ordini con 3 già aperti con 2 x lotti, allora:
int Opened_pos=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  { if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
    { Opened_pos++;
} } }
if (Opened_pos>=4) double lot=lot*2;
 
Fox_RM:

Buon pomeriggio!

Sto ancora capendo le cose con gli array.

Ho bisogno di caricare i valori del numero di punti nell'array ad ogni nuovo tick.

La dimensione dell'array sarà diversa ogni volta. Cosa dovrei fare in questo caso, usare ArreyResize su ogni iterazione del ciclo?

1-Item: la vostra filosofia di cambiare la dimensione dell'array è difettosa fin dall'inizio, in 99 casi su 100 potete usare solo 10 celle per gestire le letture degli indicatori;

2°: ricalcolare queste letture ad ogni spunta è un capriccio di un cervello male informato.