Ist die Aufgabe prinzipiell in MQL4 lösbar? - Seite 2

 

Geben Sie mir den Code, wir werden es bis heute Abend herausfinden.

Sie können es in eine Nachricht schreiben :)

 
tara:
Geben Sie mir den Code, wir werden es bis zum Abend herausfinden.

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

//#include <WinUser32.mqh>
//int whwnd;
//#include <stdlib.mqh> // Standardbibliothek
doppeltes b;
doppeltes Prozent;
double maxpercent = 0;
int timetoresume = 10;
int selecttime = 1;
string status,status1;
int gesamt;
int magic[100];
int kol=0;
int tempkol =0;
//+------------------------------------------------------------------+
//| Experten-Initialisierungsfunktion |
//+------------------------------------------------------------------+
int init()
{

zurück(0);
}
//+------------------------------------------------------------------+
//| Experten-Deinitialisierungsfunktion |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
zurück(0);
}
//+------------------------------------------------------------------+
//| Expertenstartfunktion |
//+------------------------------------------------------------------+
int start()
{
// while(!IsStopped()) // bis Benutzer.
/// { // ...stoppt die Ausführung des Programms nicht
// RefreshRates();
b = Kontostand()/100;
Prozent = KontoGewinn()/b;
if (maxProzent > Prozent) maxProzent = Prozent;
ZeitResume = TimeLocal();
if (Prozent*(-1) > 1) status = "Einfrieren aktiv";
sonst Status = "Läuft";
total=AuftragsSumme();
kol = 0;
for (int i=gesamt; i>0; i--) { //jedem Element des Arrays den Wert der einzelnen offenen Aufträge zuweisen
OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
magic[i] = OrderMagicNumber ();
// Drucken ("Magie " + i+" " +magic[i];
}
for (int k = 1; k <= 1; k++){ // Vergleiche die Magie des ersten offenen Auftrags mit den nachfolgenden Aufträgen
tempkol = magic[k];
for ( int l = 1; l <=Gesamt;l++){
if (tempkol != magic[l]) kol++;
}
}
if(kol >= 2){ // wenn mehr als 2 EAs bereits in den Handel eingestiegen sind
GlobalVariableSet ("Freeze1",200) ; // andere EAs müssen auf diese globalen Variablen hören
GlobalVariableSet ("Freeze2",200); // und keine Geschäfte einzugehen, während die anderen Zeit haben, Aufträge zu eröffnen
status1="test2"; // advisor GlobalVariableSet ("Freeze1",200) tut, nachdem es gewartet hat
} //eine Warteschlange im Terminal nehmen
Kommentar ( KontoGewinn()
,"\n"
, "DrawDown " , NormalizeDouble (percent,1)*(-1), " % ", " MaxDrawDown " , NormalizeDouble (maxpercent,1)*(-1), " % "
, Timetoresume
,"\n"
",Status," ",Prozent*(-1)
,"\n"
, "Gesamtbetrag der Bestellung ",Gesamtbetrag
,"\n"
, "OrderSymbol()," Magic ",OrderMagicNumber()," ",kol
,"\n"," ",status1
);
Rückkehr;
}

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

Urteilen Sie nicht, das letzte Mal, dass ich ein Programm in Sinclair geschrieben habe, war in Basic, als ich noch zur Schule ging .....


 
Zakyza:


Ist es möglich, in MQL4 ein Prioritätensystem festzulegen, so dass zuerst der Code des verwaltenden EA ausgeführt wird und dann alle anderen EAs?


Natürlich ist das möglich.

Organisieren Sie die Arbeit der EAs nach dem "Master-Slave"-Schema

 
avtomat:


Natürlich können Sie das.

Organisation von Master-Slave-Beratern, die nach dem Prinzip "Master-Slave" arbeiten


Trading Expert Advisors können nur durch die Änderung der globalen Variable beeinflusst werden, und sie hören auf diese Variable GlobalVariableSet ("Freeze1",200), wenn mein "Manager" sich dazu herablässt, zu warten, bis er an der Reihe ist, und schreiben dort 200
 
Zakyza:

Trading Expert Advisors können nur durch die Änderung des Wertes einer globalen Variable beeinflusst werden, und sie hören auf diese Variable GlobalVariableSet ("Freeze1",200), wenn mein "Manager", während er darauf wartet, dass er an der Reihe ist, dort 200 schreibt

Warum wartet Ihr Vorgesetzter, wenn er der Vorgesetzte ist, bis er an der Reihe ist?

Es sind die Sklaven, die auf ihre warten sollten: Manager hat ein Handelsverbot in GV geschrieben - sie sitzen, bleiben still (Sklave hat globale Flagge ersten Tick überprüft, wenn 'sit no bleep' - sagte JawolGerGeneral, und return(0))...

Warum wartet Ihr Manager, bis er an der Reihe ist, um auf die GV-Flagge zuzugreifen?

 
Das alles wird von einem Expert Advisor )))) erledigt. Sie können 100 Paare darin verstauen ))))
 
artikul:
Das alles wird von einem Expert Advisor )))) erledigt. Sie können 100 Paare darin verstauen ))))

Das ist nicht das, worüber wir reden...
 

Meister

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

int start()
   .....

   work=GlobalVariableGet(work);

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

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

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

   .....

Sklave

.....

int start()


   work=GlobalVariableGet(work);

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

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

.....

Ich hoffe, ich habe mich klar ausgedrückt.

 
avtomat:

Meister

Sklave

Ich hoffe, ich habe mich klar ausgedrückt.


Alles klar, danke.

Ich habe es auf diese Weise versucht (d. h. je nach Situation zu verbieten und zu erlauben), aber bei mir funktioniert es folgendermaßen:

Nach dieser Initialisierung des Masters: int deinit().... // Verbot der Arbeit von Sklaven ist stumm, aber sobald der Assistent entspannt ( if (number of identical majik <=2) ) und schreibt in GlobalVariableSet(work,1); // Aktivierung von Sklaven , und es gibt 8 Sklaven auf 8 verschiedenen Paaren, verwalten in 4 - 6 Paaren statt 2 wie in der Master-Bedingung angegeben zu öffnenSie öffnen sich, BEVOR der Master "begreift", dass die "Anzahl der identischen Majicies" deutlich größer als 2 ist. Danach schweigen natürlich die anderen Slaves, aber es sind nicht mehr wie gewünscht 2 Kopien offen, sondern 4 - 6.

So wie ich es verstehe, wird die Kontrolle an int start ( ) slave EAs gegeben, nachdem ich int start() Code ausführe und es hängt von int start( )der slave EAs ab und wie viele Kopien jedes Paares vor dem Start des Assistenten geöffnet werden und ein globales wird unerschwinglich. Bitte korrigieren Sie mich, wenn ich den Algorithmus des Terminals und den Kern des Problems missverstanden habe. Grob gesagt so: wenn ein Master und ein Slave am ehesten richtig funktionieren, aber die Slaves dann 8-10 !

Deshalb schrieb ich, dass ich versucht habe, den Master in einer Schleife zu starten und ihn für immer eingeschaltet zu lassen, aber mein Terminal blieb einfach hängen.

artmedia70: " Warum wartet Ihr Manager, wenn es denn ein Manager ist, auf eine Art Warteschlange? " - das würde ich gerne wissen.

 

Und warum und wieso werden zwei identische Zauberer hergestellt?

Globale Variablen können verwendet werden, um den einbezogenen EAs nicht überlappende magische Bereiche zuzuweisen. Die entsprechenden Prüfungen und Zuweisungen werden in init() vorgenommen.

Außerdem können wir die Anzahl der für jedes Symbol geöffneten Orders begrenzen, indem wir sie explizit angeben oder einen Master zuweisen, je nach der aktuellen allgemeinen Situation, die der Master genau kontrollieren soll.

Das heißt, wenn der Slave eine Aktion durchführt, muss er/sie sich beim Master melden. Der Meister muss seinerseits eine Zusammenfassung geben, von der das weitere Handeln (oder Nichthandeln) des Sklaven abhängt.