Emulation des ticks d'un EA/indicateur - page 5

 
Zhunko: Igor, cette façon de se déconnecter d'Internet n'est pas bonne. Beaucoup de choses ne fonctionnent pas dans ce mode. Vous n'avez pas besoin de désactiver l'accès à Internet.

non, son cog - sur la première page, fonctionne bien dans winHp, vous avez tort, mais dans win7 pour une raison quelconque il ne voulait pas travailler pour moi

Meat:Il y a une hypothèse que le code ne fonctionne pas là où il y a un gain de 64 bits. Je n'en ai que 32 donc je ne peux pas vérifier.

non, j'ai win7 max 32bit

 
IgorM:

Non, son cog - sur la première page, fonctionne bien dans winHP, vous avez tort, mais dans win7 pour une raison quelconque il ne voulait pas travailler pour moi

Igor, je ne parle pas du code d'Alexey, je parle de se déconnecter d'Internet.
 
Zhunko:

Comment trader à partir d'un indicateur à tic-tac ? Le MQL4 ne fournit pas cela.

Vraiment ! Pourquoi ai-je besoin de l'ajout d'un indicateur à tic-tac qui ne peut pas trader, si je peux tout faire dans un conseiller expert en boucle ? Cela ne nécessitera aucune difficulté avec WinAPI, l'interface MT4 ne deviendra pas plus lente, et l'EA fonctionnera trois fois plus vite. Pourquoi compliquer les choses comme ça ?

Eh bien, laissons cette discussion, elle ne mènera à rien de constructif de toute façon, très probablement au contraire. Vous avez déjà commencé à déformer (je ne sais pas, intentionnellement ou non) le sens de ce que j'ai écrit, j'ai écrit en russe que je ne trade pas à partir d'un indicateur, mais à partir d'un metatrader, alors que vous parlez encore d'une sorte de trading à partir d'un indicateur. Si vous avez interprété quelque chose de faux à partir de ce que j'ai dit, alors je m'explique : la phrase "l'indicateur est utilisé dans le trading" ne signifie pas que les transactions sont exécutées par un indicateur.

 
Meat:

J'ai déjà commencé à déformer (je ne sais pas si c'est intentionnel ou non) le sens de ce que j'ai écrit. Vous avez déjà commencé à déformer (je ne sais pas si c'est intentionnel ou non) le sens de ce que j'ai écrit, j'ai écrit en russe que je fais du trading non pas à partir d'un indicateur, mais à partir d'un metatrader, et vous parlez à nouveau d'un certain trading à partir d'un indicateur. Si vous avez mal interprété quelque chose que j'ai dit précédemment, alors je vous explique : la phrase "l'indicateur est utilisé dans le trading" ne signifie pas que l'indicateur effectue la transaction.

Donc, un conseiller expert qui reçoit des signaux d'un indicateur effectue des transactions ? Et bien sûr, MT4 fait tout cela ? Est-ce correct ? Si c'est le cas, ma question demeure. Pourquoi ne pas laisser le conseiller expert faire tout cela ? C'est la chose rationnelle à faire.
 
Zhunko: Igor, je ne parle pas du code d'Alexey, je parle de se déconnecter d'Internet.

oui, je comprends, mais son code fonctionne quand l'internet est éteint dans winhr

Le code, en principe, est nécessaire, nous le faisons comme un inluder et avons des tics dans n'importe quel code le week-end, particulièrement utile quand on travaille avec des objets graphiques - les gens demandent souvent de faire des "règles intelligentes" et ainsi de suite, et le week-end vous devez faire du code "à l'œil".

 
IgorM:

oui, je comprends, mais son code fonctionne quand l'internet est éteint dans winhr

Et le code, en principe, est nécessaire, le faire comme un inluder et le week-end avoir une coche dans n'importe quel code, en particulier utile lorsque l'on travaille avec des objets graphiques - les gens demandent souvent de faire des "règles intelligentes" et ainsi de suite, et le week-end avoir à faire du code "à l'œil".

Eh bien, j'ai posté un code qui fonctionne partout. Une ligne. Pas de minuterie. Il fonctionne dans tous les indicateurs et sur tous les systèmes d'exploitation. C'est suffisant pour une expérience.

J'ai également donné le code pour le conseiller expert ci-dessus. La ligne qui génère le tick pour l'Expert Advisor peut être substituée dans le code de l'indicateur. Dans ce cas, cela affectera également l'expert.

La bibliothèque peut être simplifiée. Tout y est déjà mis en œuvre.

 
Zhunko:
Donc, un conseiller expert qui reçoit des signaux d'un indicateur effectue des transactions ? Et bien sûr, MT4 fait tout cela ? Est-ce correct ? Si c'est le cas, ma question demeure. Pourquoi ne pas laisser le conseiller expert faire tout cela ? C'est la chose rationnelle à faire.

Si nous parlions de trading automatique, la question des indicateurs ou des ticks ne se poserait pas du tout, car ils ne sont pas nécessaires dans ce cas. Vous avez donc dû mal comprendre le but de ce fil de discussion depuis le début.

 

Au fait, il y a autre chose. La ligne

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

doit être remplacé par

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

Sinon, une erreur se produira lors d'un nouvel appel à SetMyTimer, ou vous pouvez simplement initialiser le tableau avec zéro avant de démarrer la boucle.

Quant à Win7, je n'ai pas réussi à y reproduire le problème, tout fonctionne bien pour moi. Et faire du débogage à l'aveugle n'est pas réaliste. Je me demande si quelqu'un d'autre ici a ce code qui fonctionne aussi sur le septième ? Parce que j'ai l'impression que j'exécute une sorte de Windows spécial.

 

Je pense avoir trouvé la cause de l'erreur. Voici la version corrigée de la fonction SetMyTimer.

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) );
}

Cela devrait fonctionner correctement maintenant.

 

non..., ne fonctionne pas

aucune erreur dans le journal, même l'internet dans le terminal, sur les conseils de Vadim, ne s'est pas déconnecté - il n'y a pas de ticks sur la sortie de toute façon