Emulazione di tick da un EA/indicatore - pagina 5

 
Zhunko: Igor, questo modo di disconnettersi da internet non è buono. Molte cose non funzionano in questa modalità. Non è necessario disabilitare l'accesso a internet.

no, il suo ingranaggio - nella prima pagina, funziona bene in winHp, ti sbagli, ma in win7 per qualche motivo non voleva funzionare per me

Meat:C'è un presupposto che il codice non funziona dove c'è un win a 64 bit. Ho solo 32 quindi non posso controllare.

no, ho win7 max 32bit

 
IgorM:

No, il suo ingranaggio - nella prima pagina, funziona bene in winHP, ti sbagli, ma in win7 per qualche motivo non voleva funzionare per me

Igor, non sto parlando del codice di Alexey, sto parlando della disconnessione da Internet.
 
Zhunko:

Come si fa a fare trading da un indicatore a ticchettio? MQL4 non lo fornisce.

Davvero! Perché ho bisogno dell'aggiunta dell'indicatore ticchettio che non può fare trading, se posso fare tutto in un Expert Advisor in loop? Questo non richiederà alcuna difficoltà con WinAPI, l'interfaccia MT4 non diventerà più lenta e l'EA funzionerà tre volte più velocemente. Perché complicare le cose in questo modo?

Bene, lasciamo questa discussione, non porterà comunque a nulla di costruttivo, molto probabilmente al contrario. Hai già iniziato a distorcere (non so, intenzionalmente o no) il significato di ciò che ho scritto, ho scritto in russo che faccio trading non da un indicatore, ma da una metatrader, mentre tu stai di nuovo parlando di una sorta di trading da un indicatore. Se hai interpretato male qualcosa da ciò che ho detto, allora ti spiego: la frase "l'indicatore è usato nel trading" non significa che le operazioni sono eseguite da un indicatore.

 
Meat:

Ho già iniziato a distorcere (non so se intenzionalmente o no) il significato di ciò che ho scritto. Hai già iniziato a distorcere (non so se intenzionalmente o no) il significato di ciò che ho scritto, ho scritto in russo che non faccio trading da un indicatore, ma da una metatrader, e tu sei di nuovo su un certo trading da un indicatore. Se hai interpretato male qualcosa che ho detto prima, allora ti spiego: la frase "l'indicatore viene utilizzato nel trading" non significa che l'indicatore esegue la transazione.

Quindi, un Expert Advisor che riceve segnali da un indicatore fa trading? E naturalmente, MT4 fa tutto questo? È corretto? Se è così, la mia domanda rimane. Perché non lasciare che l'Expert Advisor faccia tutto questo? È la cosa più razionale da fare.
 
Zhunko: Igor, non sto parlando del codice di Alexey, sto parlando della disconnessione da Internet.

Sì, ho capito, ma il suo codice funziona quando internet è spento in winhr

Il codice, in linea di principio, è necessario, lo facciamo come un inluder e abbiamo spunti in qualsiasi codice nel fine settimana, particolarmente utile quando si lavora con oggetti grafici - la gente spesso chiede di fare "righelli intelligenti" e così via, e nel fine settimana si deve fare il codice "a occhio".

 
IgorM:

Sì, ho capito, ma il suo codice funziona quando internet è spento in winhr

E il codice, in linea di principio, è necessario, farlo come un inluder e nei fine settimana avere un segno di spunta in qualsiasi codice, in particolare utile quando si lavora con oggetti grafici - la gente spesso chiede di fare "righelli intelligenti" e così via, e nei fine settimana devono fare codice "a occhio".

Beh, ho postato un codice che funziona ovunque. Una linea. Nessun timer. Funziona in tutti gli indicatori e su qualsiasi sistema operativo. È sufficiente per un esperimento.

Ho anche dato il codice per l'Expert Advisor sopra. La linea che genera il tick per l'Expert Advisor può essere sostituita nel codice dell'indicatore. In questo caso, influirà anche l'esperto.

La biblioteca può essere semplificata. Tutto è già implementato lì.

 
Zhunko:
Quindi, un Expert Advisor che riceve segnali da un indicatore fa trading? E naturalmente MT4 fa tutto questo? È corretto? Se è così, la mia domanda rimane. Perché non lasciare che l'Expert Advisor faccia tutto questo? È la cosa più razionale da fare.

Se stessimo parlando di trading automatico, allora la questione degli indicatori o dei tick non sarebbe affatto sollevata, perché non sono necessari. Quindi devi aver frainteso il punto di questo thread fin dall'inizio.

 

A proposito, ecco un'altra cosa. La linea

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

dovrebbe essere sostituito da

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

Altrimenti si verificherà un errore quando si richiama SetMyTimer, o si può semplicemente inizializzare l'array con zero prima di iniziare il ciclo.

Per quanto riguarda Win7, non sono riuscito a riprodurre il problema, tutto funziona bene per me. E fare il debug alla cieca non è realistico. Mi chiedo se c'è qualcun altro qui che ha questo codice che funziona anche su settimo? Perché ho la sensazione che sto eseguendo qualche tipo di Windows speciale.

 

Penso di aver trovato l'errore: ecco la versione corretta della funzione 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) );
}

Ora dovrebbe funzionare bene.

 

no..., non funziona

nessun errore nel log, anche l'internet nel terminale, su consiglio di Vadim, non si è disconnesso - non ci sono comunque zecche sull'output