Emulation von Ticks aus einem EA/Indikator - Seite 5

 
Zhunko: Igor, diese Art, die Verbindung zum Internet zu unterbrechen, ist nicht gut. Viele Dinge funktionieren in diesem Modus nicht. Sie brauchen den Internetzugang nicht zu deaktivieren.

nein, seine cog - auf der ersten Seite, funktioniert gut in winHp, du bist falsch, aber in win7 aus irgendeinem Grund wollte es nicht für mich zu arbeiten

Meat:Es gibt eine Annahme, dass der Code nicht funktioniert, wenn es einen 64-Bit-Win gibt. Ich habe nur 32, kann es also nicht überprüfen.

nein, ich habe win7 max 32bit

 
IgorM:

Nein, seine cog - auf der ersten Seite, funktioniert gut in winHP, du bist falsch, aber in win7 aus irgendeinem Grund wollte es nicht für mich zu arbeiten

Igor, ich spreche nicht von Alexeys Code, ich spreche davon, die Verbindung zum Internet zu trennen.
 
Zhunko:

Wie kann man mit einem Tick-Indikator handeln? MQL4 bietet das nicht.

Wirklich! Warum brauche ich den zusätzlichen Tick-Indikator, der nicht handeln kann, wenn ich alles in einem Expert Advisor mit Schleife machen kann? Dies erfordert keine Schwierigkeiten mit WinAPI, die MT4-Schnittstelle wird nicht langsamer, und der EA arbeitet dreimal schneller. Warum sollte man die Dinge so kompliziert machen?

Nun, lassen wir diese Diskussion, sie wird ohnehin zu nichts Konstruktivem führen, eher im Gegenteil. Sie haben bereits begonnen, die Bedeutung dessen, was ich geschrieben habe, zu verdrehen (ich weiß nicht, ob absichtlich oder nicht), ich habe auf Russisch geschrieben, dass ich nicht mit einem Indikator, sondern mit einem Metatrader handele, während Sie wieder von einer Art von Handel mit einem Indikator sprechen. Wenn Sie etwas falsch interpretiert haben, was ich gesagt habe, dann erkläre ich es Ihnen: Der Ausdruck "Indikator wird beim Handel verwendet" bedeutet nicht, dass die Geschäfte von einem Indikator ausgeführt werden.

 
Meat:

Ich habe bereits damit begonnen, die Bedeutung dessen, was ich geschrieben habe, zu entstellen (ich weiß nicht, ob absichtlich oder nicht). Sie haben bereits begonnen, zu verzerren (ich weiß nicht, ob absichtlich oder nicht) die Bedeutung dessen, was ich geschrieben habe, habe ich in russischer Sprache geschrieben, dass ich den Handel nicht von einem Indikator, sondern von einem Metatrader, und Sie sind wieder über einige Handel von einem Indikator. Wenn Sie etwas falsch interpretiert, was ich früher gesagt habe, dann erkläre ich: der Satz "der Indikator wird im Handel verwendet" bedeutet nicht, dass der Indikator führt die Transaktion.

Also, ein Expert Advisor, der Signale von einem Indikator erhält, handelt? Und natürlich macht MT4 all das? Ist das richtig? Wenn ja, bleibt meine Frage bestehen. Warum nicht den Expert Advisor all dies tun lassen? Es ist das Vernünftigste, was man tun kann.
 
Zhunko: Igor, ich spreche nicht von Alexeys Code, ich spreche davon, die Verbindung zum Internet zu trennen.

Ja, ich verstehe, aber sein Code funktioniert, wenn das Internet in Winhr ausgeschaltet ist.

Der Code ist im Prinzip notwendig, wir machen ihn als Inluder und haben am Wochenende Häkchen in jedem Code, besonders nützlich bei der Arbeit mit grafischen Objekten - die Leute fragen oft nach "intelligenten Linealen" und so weiter, und am Wochenende muss man den Code "nach Augenmaß" machen.

 
IgorM:

Ja, ich verstehe, aber sein Code funktioniert, wenn das Internet in Winhr ausgeschaltet ist.

Und der Code, im Prinzip benötigt wird, machen Sie es als inluder und am Wochenende haben ein Häkchen in jedem Code, insbesondere nützlich bei der Arbeit mit grafischen Objekten - die Leute fragen oft zu machen "smart Lineale" und so weiter, und am Wochenende haben, um Code "nach Augenmaß" zu machen.

Nun, ich habe einen Code veröffentlicht, der überall funktioniert. Eine Zeile. Keine Zeitschaltuhr. Es funktioniert mit allen Indikatoren und auf jedem Betriebssystem. Das reicht für ein Experiment.

Ich habe auch den Code für den Expert Advisor oben angegeben. Die Zeile, die den Tick für den Expert Advisor erzeugt, kann im Code des Indikators ersetzt werden. In diesem Fall ist auch der Sachverständige davon betroffen.

Die Bibliothek kann vereinfacht werden. Dort ist bereits alles implementiert.

 
Zhunko:
Also, ein Expert Advisor, der Signale von einem Indikator erhält, handelt? Und natürlich macht MT4 all das? Ist das richtig? Wenn ja, bleibt meine Frage bestehen. Warum lassen Sie das nicht den Expert Advisor machen? Es ist das Vernünftigste, was man tun kann.

Wenn es um den automatischen Handel ginge, dann würde sich die Frage nach Indikatoren oder Ticks gar nicht stellen, weil sie dort nicht gebraucht werden. Sie haben also den Sinn dieses Threads von Anfang an falsch verstanden.

 

Übrigens, da ist noch etwas. Die Linie

TimerCode[byte/4] += (value[i]>>(8*j)&0xFF) <<(byte%4*8);

sollte ersetzt werden durch

TimerCode[byte/4] |= (value[i]>>(8*j)&0xFF) <<(byte%4*8);

Andernfalls tritt beim erneuten Aufruf von SetMyTimer ein Fehler auf, oder Sie können das Array vor dem Start der Schleife einfach mit Null initialisieren.

Was Win7 betrifft, so konnte ich das Problem dort nie reproduzieren, bei mir funktioniert alles einwandfrei. Und eine blinde Fehlersuche ist unrealistisch. Ich frage mich, ob es jemand anderes hier, die diesen Code hat auch funktioniert auf siebten, weil ich das Gefühl, dass ich eine Art von speziellen Windows laufen.

 

Ich glaube, ich habe den Fehler gefunden: Hier ist die korrigierte Version der SetMyTimer-Funktion.

int SetMyTimer(int interval)
{    
  int MT4InternMsg= RegisterWindowMessageA("MetaTrader4_Internal_Message");
  int hWnd= WindowHandle(Symbol(),Period());
  int PostMsgAddr= GetProcAddress(GetModuleHandleA("user32.dll"),"PostMessageA");
  if (PostMsgAddr==0) return(0);
  // push ebp; move ebp,esp; push 01; push 02; push MT4InternMsg; push hWnd; mov eax,PostMsgAddr; call eax; pop ebp; ret 0010;    
  int value[]={ 0x55, 0x8B,0xEC, 0x6A,01, 0x6A,02, 0x68,0000, 0x68,0000, 0xB8,0000, 0xFF,0xD0, 0x5D, 0xC2,0x10 };
  int len[]=  { 1,    1,   1,    1,   1,  1,   1,  1,   4,    1,   4,    1,   4,    1,   1,    1,    1,   2 };
  value[8]=MT4InternMsg;  value[10]=hWnd;  value[12]=PostMsgAddr; 
  int byte=0;  ArrayInitialize(TimerCode,0);
  for (int i=0;  i<ArraySize(value);  i++)
    for (int j=0;  j<len[i];  j++, byte++)
      TimerCode[byte/4] |= value[i]>>(8*j)&0xFF<<(byte%4*8);

  return ( SetTimer(hWnd, TimerId, interval, TimerCode) );
}

Es sollte jetzt gut funktionieren.

 

nein..., funktioniert nicht

keine Fehler im Log, auch das Internet im Terminal hat auf Anraten von Vadim die Verbindung nicht unterbrochen - es gibt sowieso keine Ticks in der Ausgabe

Grund der Beschwerde: