Fehler, Irrtümer, Fragen - Seite 623

 
MetaDriver:
Sie werden ein böses Erwachen erleben... :))

Wahrscheinlich,

Ich habe die Essenz des Problems gelesen, aber ich verstehe nicht, warum jeder Indikator einen Timer haben sollte und warum es so viele Indikatoren gibt,

ob es möglich ist, die Gebote des gewünschten Instruments direkt im EA-Timer abzurufen und sie in der allgemeinen Baugruppe zu speichern,

Wenn Sie einen Indikator verwenden möchten, benötigen Sie einen größeren Zeitgeber, aber in diesem Fall gibt es einen unsynchronisierten Datenstrom.

Bei Spionen ist das anders - sie haben keine Uhren, und die Ereignisse für alle Instrumente können lange Zeit ausbleiben, oder sie beginnen nacheinander zu ticken.

SZZ Übrigens, bei Geschäften, bei denen es einen letzten Kurs gibt, sind die Bid-Daten nicht immer vorhanden, also prüfen und schreiben Sie entweder Bid oder Last.

 

MetaDriver:

Ich schlage einen Kompromiss vor: Sie fangen Ticks mit Spionen ab und senden sie sofort an den Head Expert Advisor mit einem Millisekunden-Label (GetTickCount()). Expert Advisor ordnet sie entsprechend ihrer Beschriftung und unterteilt sie in zweite Blöcke.

Es ist nicht sehr einfach, aber es wird genau sein.

Das ist keine schlechte Variante. Meiner Meinung nach ist es die einzige, die als Grundlage dienen kann.

Urain:

Übrigens, bei Geschäften, bei denen es einen letzten Kurs gibt, sind die Bid-Daten nicht immer vorhanden, also prüfen und schreiben Sie entweder Bid oder Last.

Eine gute Klarstellung, die mir nicht begegnet ist. Dies wird zu berücksichtigen sein.
 

MetaDriver:

Предлагаю компромисс: ловишь тики шпионами и сразу отправляешь в головной эксперт, снабдив милисекундной меткой(GetTickCount()). Эксперт их упорядочивает в соответствии с метками и нарезает секундные блоки.

Не очень просто, зато с точностью будет порядок.

Interessant:

Keine schlechte Option. Meiner Meinung nach die einzige, die als Grundlage taugt.

Gute Klarstellung, das ist mir noch nicht aufgefallen. Dies wird zu berücksichtigen sein.

Es handelt sich zwar nicht um eine schlechte Variante, aber der Mechanismus zum Senden von Häkchen ist im Terminal nicht vorhanden. Versuchen Sie, sich 5-10 Ticks/Sek. bei 16 Paaren vorzustellen. Noch einmal - es ist schon weg)).

Und man braucht keine solche Genauigkeit - 1 Sekunde reicht aus.

Vielen Dank an Sie alle - das Thema ist abgeschlossen.

 

Das Problem ist sehr unangenehm, da in der Vergangenheit, als die minutengenaue Historie noch nicht verfügbar war, Minutenbalken durch Balken höherer Zeitrahmen ersetzt wurden. Die einzige Lösung, die uns in den Sinn kommt, ist die komplexe Umwandlung von gefälschten in echte Barren, wobei die Genauigkeit nicht garantiert werden kann. Es geht nicht so sehr um die Komplexität, sondern um die Zweifel an der Genauigkeit einer solchen Umrechnung.

Die erste Aufgabe besteht darin, die Relevanz der entstehenden Fibonacci-Zeitzonen zu überprüfen. Wenn die Zone zu weit entfernt ist und die Arbeitsbreite aller ihrer Unterzonen (standardmäßig bis zu 34 Basisbreiten) so schmal ist, dass die rechte Kante nicht bis zum jetzigen Zeitpunkt reicht, dann bauen wir sie nicht, andernfalls erstellen wir ein Objekt auf dem Diagramm. Ich habe versucht, dieses Problem auf zwei ähnliche Arten zu lösen, von denen ich eine anführe. Der einzige Unterschied besteht darin, dass ich bei der ersten Variante von Anfang an getanzt habe, indem ich

   datetime firstDate=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_FIRSTDATE);
Aber in der zweiten - im Gegenteil (ich zitiere diese Methode), die Essenz und die Ergebnisse sind absolut die gleichen. Getestet bei NZD/USD.

Wenn Sie eine gefälschte Historie haben, die an einem anderen Datum als 2009 endet, wie ich es getan habe, ordnen Sie die beiden Fibo-Zeitzonen so an, dass eine von ihnen durch dieses Kippdatum verläuft und die zweite bereits vollständig auf der rechten Seite der Historie liegt, wo alle Balken echt sind. Vergessen Sie in diesem Fall nicht, die Werte von startTime1, endTime1 und ggf. startTime2, endTime2 im Skript zu ändern; Preise können Sie nicht anpassen - das ist nicht wichtig. Jetzt können Sie es testen... Das Ergebnis wird traurig sein: Wenn der Prüfalgorithmus für beide Zeitzonen unverändert bleibt, wird er nur für die Zone korrekt funktionieren, die einen Fuß vor dem Wendepunktdatum und einen weiteren Fuß danach hat, der Algorithmus wird sie fälschlicherweise herausfiltern und uns daran hindern, sie zu bauen. Beachten Sie, dass beide Zonen relativ nahe beieinander liegen und eine ähnliche Breite haben. Diese beiden Breiten reichen weit in die Zukunft und werden lange Zeit relevant sein, so dass keine der beiden Zonen herausgefiltert werden sollte (kommentieren Sie die Bedingungen aus und sehen Sie, dass beide Zeitzonen gebildet werden).

void OnStart()
  {
   datetime startTime1=D'2009.07.08 18:00:00';
   datetime endTime1=D'2009.11.03 12:17:00';
   datetime startTime2=D'2009.06.30 08:00:00';
   datetime endTime2=D'2009.10.21 20:16:00';

   double startPrice1=0.61930;
   double endPrice1=0.70948;
   double startPrice2=0.65470;
   double endPrice2=0.76300;

   int FTZ1pos1,FTZ2pos1,bandwidth;
   datetime Arr[],time1;

   CopyTime(_Symbol,PERIOD_M1,0,1,Arr);
   time1=Arr[0];

   FTZ1pos1=CopyTime(_Symbol,PERIOD_M1,time1,startTime1,Arr);
   bandwidth=CopyTime(_Symbol,PERIOD_M1,endTime1,startTime1,Arr)*(34+2); // +2 - небольшой запас общей ширины
                                                                         // зоны на всякий случай

   if(FTZ1pos1<=bandwidth)
      ObjectCreate(0,"FTZ1",OBJ_FIBOTIMES,0,
                   startTime1,startPrice1,
                   endTime1,endPrice1
                  );


// ---
   FTZ2pos1=CopyTime(_Symbol,PERIOD_M1,time1,startTime2,Arr);
   bandwidth=CopyTime(_Symbol,PERIOD_M1,endTime2,startTime2,Arr)*(34+2); // +2 - небольшой запас общей ширины
                                                                         // зоны на всякий случай

   if(FTZ2pos1<=bandwidth)
      ObjectCreate(0,"FTZ2",OBJ_FIBOTIMES,0,
                   startTime2,startPrice2,
                   endTime2,endPrice2
                  );
  }

Erwünschtes Ergebnis:Es muss zwei Fibo-Zeitzonen geben

Irgendwo zwischen der ersten und der zweiten 0-Basis-Linie gibt es einen Kipppunkt, der falsche Minutenbalken von echten trennt.

Wenn Sie Berechnungen in der Anzahl der Balken ablehnen und alles mit Datumsangaben berechnen, wird dies sicherlich nicht die gewünschte Genauigkeit bringen, da Sie Wochenenden (+/- Stunde des Marktschlusses/der Markteröffnung), Feiertage usw. abziehen müssen, ganz zu schweigen von fehlenden Balken in Abwesenheit von Ticks über eine Minute und Abweichungen von der Zeitlinie.

Was raten Sie als zuverlässige Lösung?

 

Fehler beim Laden der Datei in Expert Advisor. 10 Unterschiede finden. Der erste Code bezieht sich auf das Skript, der zweite auf den Expert Advisor, sie sind identisch Ctrl-C Ctrl-V. Der Code funktioniert im Skript, im Expert Advisor funktioniert er nicht.

#include <\\MyClass\RegulFind-v1-1.mqh>
#include <Trade\Trade.mqh>
int hMa,hRsi ;
double mMa[],mRsi[];                             
Kohonen  koh;
CTrade trade ;
void OnStart()
  {
   koh.LoadMap("KitMaRsi.csv") ;
   hMa=iMA(_Symbol,Period(),10,0,MODE_EMA,PRICE_CLOSE) ;
   if(hMa ==INVALID_HANDLE)
      Print("Ошибка загрузки машки====================== ",GetLastError());
   hRsi=iRSI(_Symbol,Period(),10,PRICE_CLOSE);
   if(hRsi ==INVALID_HANDLE)
      Print(" Ошибка загрузки РСИ ==========");   
   
  }
#include <\\MyClass\RegulFind-v1-1.mqh>
#include <Trade\Trade.mqh>
int hMa,hRsi ;
double mMa[],mRsi[];                             
Kohonen  koh;
CTrade trade ;
int OnInit()
  {
   koh.LoadMap("KitMaRsi.csv") ;
   hMa=iMA(_Symbol,Period(),10,0,MODE_EMA,PRICE_CLOSE) ;
   if(hMa ==INVALID_HANDLE)
      Print("Ошибка загрузки машки====================== ",GetLastError());
   hRsi=iRSI(_Symbol,Period(),10,PRICE_CLOSE);
   if(hRsi ==INVALID_HANDLE)
      Print(" Ошибка загрузки РСИ ==========");   
   return(0);
  }
 
ivandurak:

Fehler beim Laden der Datei in Expert Advisor. 10 Unterschiede finden. Der erste Code bezieht sich auf das Skript, der zweite auf den Expert Advisor, sie sind identisch Ctrl-C Ctrl-V. Der Code funktioniert im Skript, im Expert Advisor funktioniert er nicht.

Der Prüfer hat eine andere Datei-Sandbox. Wenn Sie möchten, dass Expert Advisor im Tester und auf normale Weise mit einer *.csv-Datei arbeitet, legen Sie sie in das gemeinsame Verzeichnis und öffnen Sie die Datei mit dem Modifikator FILE_COMMON


P.S. Um sie in den gemeinsamen Ordner zu legen, müssen Sie entweder eine Datei mit dem Modifikator
FILE_COMMONschreiben , oder etwas wie dieses finden (eine Variante für XP):

C:\Dokumente und Einstellungen\Alle Benutzer\Anwendungsdaten\MetaQuotes\Terminal\Common\Files\



 
x100intraday:

Was raten Sie als zuverlässige Lösung?

Zurück zu MT4.

Ich habe mich mit den Entwicklern über die Zukunft dieses Problems in Verbindung gesetzt, aber sie haben geschwiegen, so dass ich persönlich keine Ahnung habe, was die Zukunft bringt.

 

Der Wechsel mit Zeichenvariablen scheint nicht zu funktionieren...

Anstelle von:

string type = "Buy";

switch(type)
{
case "Buy" : {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
case "Sell": {direction = ORDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
default: {return(lot_value);}
}

type" - unzulässiger Typ des Schalterausdrucks
Kaufen" - konstanter Ausdruck ist nicht integral

Ich muss es so zeichnen:

if(zShift == "Buy")  {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK);}
if(zShift == "Sell") {direction = ORDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID);}
if(zShift != "Buy" || zShift != "Sell") {return(lot_value);}

Es ist nicht so klar und es ist schief.

Es funktioniert auch in anderen Sprachen.

Soll ich es anders schreiben?

 
awkozlov:

Der Schalter scheint nicht mit Zeichenvariablen zu funktionieren...


In der Dokumentation steht (Hervorhebung hinzugefügt) - Switch operator:

Vergleicht den Wert eines Ausdrucks mit Konstanten in allen Fallvarianten und übergibt die Kontrolle an den Operator, der dem Wert des Ausdrucks entspricht. Jede Fallvariante kann mit einer ganzzahligen Konstante , einer Zeichenkonstante oder einem konstanten Ausdruck gekennzeichnet werden. Ein konstanter Ausdruck darf keine Variablen oder Funktionsaufrufe enthalten. Der Ausdruck desSchaltoperators muss vom Typ Ganzzahl sein.

 
awkozlov:

Es funktioniert auch in anderen Sprachen...

Die Tatsache, dass es in anderen Sprachen funktioniert, ist eine Besonderheit. Switch war ursprünglich nur für integrale Typen vorgesehen. Ein solches Merkmal gibt es hier nicht.