Il compito è risolvibile in linea di principio in MQL4? - pagina 2

 

Dammi il codice, lo scopriremo entro stasera.

Puoi metterlo in un messaggio :)

 
tara:
Dammi il codice, lo capiremo entro sera.

#property copyright "Copyright 2013, MetaQuotes Software Corp.
#proprietà link "http://www.metaquotes.net"

//#include <WinUser32.mqh>
//int whwnd;
//#include <stdlib.mqh> // Libreria standard
doppio b;
doppio per cento;
doppio maxpercent = 0;
int timetoresume = 10;
int selecttime = 1;
stringa status,status1;
int totale;
int magic[100];
int kol=0;
int tempkol =0;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{

ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{
// while(!IsStopped()) // finché l'utente.
/// { // ...non ferma l'esecuzione del programma
// RefreshRates();
b = Saldo del conto()/100;
percentuale = ContoProfitto()/b;
se (maxpercent > percent) maxpercent = percent;
Timetoresume = TimeLocal();
if (percent*(-1) > 1) status = "Freeze Active";
else status = "Running";
total=OrdersTotal();
kol = 0;
for (int i=totale; i>0; i--) { //assegnare ogni elemento dell'array al valore di ogni ordine aperto
OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
magic[i] = OrderMagicNumber ();
// Stampa ("Magia " + i+" " +magia[i];
}
for (int k = 1; k <= 1; k++){ // confronta il numero magico del primo ordine aperto con i successivi
tempkol = magic[k];
for ( int l = 1; l <=totale;l++){
se (tempkol != magic[l]) kol++;
}
}
if(kol >= 2){ // se più di 2 EAs sono già entrati nel trade
GlobalVariableSet ("Freeze1",200) ; // gli altri EA devono ascoltare queste variabili globali
GlobalVariableSet ("Freeze2",200); // e non entrare in accordi, mentre gli altri hanno tempo per aprire gli ordini
status1="test2"; // consiglia GlobalVariableSet ("Freeze1",200), dopo aver atteso il suo turno
} //in attesa del suo turno nel terminale
Commento ( AccountProfit()
,"\n"
, "DrawDown " , NormalizeDouble (percent,1)*(-1), " % ", " MaxDrawDown " , NormalizeDouble (maxpercent,1)*(-1), " % "
, Timetoresume
,"\n"
",stato," ",percentuale*(-1)
,"\n"
, "totale dell'ordine ",totale
,"\n"
, "OrderSymbol()," Magic ",OrderMagicNumber()," ",kol
,"\n"," ",stato1
);
ritorno;
}

//+------------------------------------------------------------------+

Non giudicare, l'ultima volta che ho scritto un programma in Sinclair, in Basic quando ero a scuola .....


 
Zakyza:


È possibile impostare un sistema di priorità in MQL4, in modo che prima venga eseguito il codice dell'EA gestore, e poi tutti gli altri EA?


Certo che è possibile.

Organizzare il lavoro degli EA secondo lo schema "master-slave

 
avtomat:


Certo che si può.

Organizzare i consiglieri master-slave per lavorare in modo "master-slave


Per favore ditemi di più su come fare. I Trading Expert Advisors possono essere influenzati solo cambiando la variabile globale e ascoltano questa variabile GlobalVariableSet ("Freeze1",200) quando il mio "manager" si degna di aspettare il suo turno e scrivere lì 200
 
Zakyza:

Per favore ditemi di più su come organizzare questo. I Trading Expert Advisors possono essere influenzati solo cambiando il valore della variabile globale e ascoltano questa variabile GlobalVariableSet ("Freeze1",200) quando il mio "manager" si degna, aspettando il suo turno, di scrivere 200 lì

Perché il suo manager, se è il manager, aspetta un qualche tipo di turno?

Sono gli schiavi che dovrebbero aspettare il loro: il manager ha scritto un divieto di commercio in GV - si siedono, stanno tranquilli (lo schiavo ha controllato la bandiera globale prima spunta, se 'sit no bleep' - ha detto JawolGerGeneral, e return(0))...

Perché il tuo manager aspetta il suo turno per accedere alla bandiera GV?

 
È tutto fatto da un solo Expert Advisor )))) Ci si possono stipare 100 coppie ))))
 
artikul:
È tutto fatto da un solo Expert Advisor )))) Si possono mettere fino a 100 coppie ))))

Beh, non è di questo che stiamo parlando...
 

master

//+------------------------------------------------------------------+
int deinit()
  {
      GlobalVariableSet(work,0);   // запрещение работы ведомым
   return(0);
  }
//+------------------------------------------------------------------+
.....

int start()
   .....

   work=GlobalVariableGet(work);

   if( work==0 && всё_хорошо )   GlobalVariableSet(work,1);   // разрешение работы ведомым

   if( work==1 && всё_плохо )    GlobalVariableSet(work,0);   // запрещение работы ведомым

// можно организовать систему запретов/разрешений любой сложности   

   .....

schiavo

.....

int start()


   work=GlobalVariableGet(work);

   if( work==0 )   { стоп } ;    // здесь возможны некоторые действия для завершения текущих процессов

   if( work==1 )   { работа };   // ведомым разрешена работа -- можно работать в нормальном режиме

.....

Spero di essere stato chiaro.

 
avtomat:

master

schiavo

Spero di essere stato chiaro.


Tutto chiaro, grazie.

Ho provato in questo modo (cioè proibire e permettere a seconda della situazione), ma per me funziona così:

Dopo questa inizializzazione del master: int deinit().... // il divieto di lavoro da parte degli schiavi è silenzioso, ma appena il mago si rilassa ( if (numero di maghi identici <=2) ) e scrive in GlobalVariableSet(work,1); // abilitando gli schiavi , e ci sono 8 schiavi su 8 coppie diverse, riescono ad aprire in 4 - 6 coppie invece di 2 come specificato nella condizione del masterSi aprono PRIMA che il master "capisca" che il "numero di majicies identiche" è significativamente maggiore di 2. Dopo di che, naturalmente, gli altri schiavi sono silenziosi, ma non è più aperto 2 copie come desiderato, ma 4 - 6.

Da quanto ho capito, il controllo viene dato agli EA slave int start () dopo che ho eseguito il codice int start() e dipende da int start( )degli EA slave e da quante copie di ogni coppia si apriranno prima dell'inizio della procedura guidata e una globale diventa proibitiva. Per favore, correggetemi se ho capito male l'algoritmo del terminale e l'essenza del problema. Grosso modo così: se un master e uno slave è molto probabile che funzionino correttamente, ma gli slave poi 8-10 !

Ecco perché ho scritto: ho provato a far partire il master in loop e a farlo rimanere acceso per sempre, ma il mio terminale si è bloccato.

artmedia70: " perché il tuo manager, se è un manager, aspetta una specie di coda? "Questo è quello che vorrei sapere .

 

E perché e perché si fanno due maghi identici?

Le variabili globali possono essere usate per assegnare aree magiche non sovrapposte agli EA inclusi. I controlli e le assegnazioni corrispondenti sono fatti in init().

Inoltre, possiamo limitare il numero di ordini aperti per ogni simbolo specificandolo esplicitamente o assegnando un master, a seconda della situazione generale attuale, che è esattamente ciò che il master dovrebbe controllare.

Ciò significa che se lo schiavo compie un'azione, deve fare rapporto al maestro. Il padrone, a sua volta, deve dare il suo riassunto, da cui dipendono le ulteriori azioni (o inazioni) dello schiavo.