Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 945

 
Leo59:

J'ai besoin du CODE INITIAL de l'indicateur technique IMA, l'indicateur qui est appelé dans le terminal MetaTrader4 sous l'onglet "Indicateurs -> Trending -> Moving Average".

C'est plus clair maintenant ?

Pourquoi réinventer la roue ?

Faites-le comme l'OsMA ou tout autre code :

//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const datetime& time[],
                 const double& open[],
                 const double& high[],
                 const double& low[],
                 const double& close[],
                 const long& tick_volume[],
                 const long& volume[],
                 const int& spread[])
  {
   int i,limit;
//---
   if(rates_total<=InpSignalSMA || !ExtParameters)
      return(0);
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit++;
//--- macd counted in the 1-st buffer
   for(i=0; i<limit; i++)
      ExtMacdBuffer[i]=iMA(NULL,0,InpFastEMA,0,MODE_EMA,PRICE_CLOSE,i)-
                    iMA(NULL,0,InpSlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//--- signal line counted in the 2-nd buffer
   SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
//--- main loop
   for(i=0; i<limit; i++)
      ExtOsmaBuffer[i]=ExtMacdBuffer[i]-ExtSignalBuffer[i];
//--- done
   return(0);
  }
//+------------------------------------------------------------------+

Ou bien vous ne faites pas du tout confiance à Metaquotes ?

 

Bonjour à tous. J'ai posté un script à la page 943 sur la description du travail et des exemples de bibliothèques *dll. J'ai compris un peu pourquoi le script ne fonctionne pas.

1. #include<WinUser32.mqh> n'est pas nécessaire dans ce cas.

2. Condition distincte if(lastkey != 0) Alert("lastkey=",lastkey) ; le code de la touche enfoncée est correctement affiché. Si vous faites un délai, il n'y a aucun doute sur la façon dont cela fonctionne.

3. Condition séparée if(lastmouse != 0) Alert("lastmouse=",lastmouse) ; produit de manière stable 512, même si la souris ne bouge pas. Il est très rare que d'autres numéros apparaissent.

En réponse au clic des boutons de la souris.

4. if(lastwnd != 0) Alert("lastwnd=",lastwnd) ; renvoie une chaîne vide, très probablement parce que la bibliothèque est ancienne, pas Unicode.

Dans l'aide, lisez que l'éditeur peut travailler avec des bibliothèques *dll, il suffit de les glisser et de les déposer dans la fenêtre de l'éditeur. Il ne s'ouvre pas.

Question. Quelqu'un peut-il aider à corriger "IdleLib.dll" ou mieux pour de l'argent. Si quelque part il y a ce sujet (et d'autres *dll) montrez le lien.

 
Veuillez me conseiller sur la façon d'interdire l'AutoTrading dans mon EA (après un événement), c'est-à-dire en mettant le bouton du terminalAutoTrading sur interdiction. J'ai essayé d'appeler la constante ACCOUNT_TRADE_ALLOWED et de changer sa valeur en false, mais le compilateur dit que cela n'aura aucun effet ( ACCOUNT_TRADE_ALLOWED == false ; //expression n'a aucun effet)
 
Essayez ceci


#import "user32.dll"
int GetForegroundWindow();
int  PostMessageW(int  hWnd, int  Msg, int  wParam, string lParam);
#import
#define  WM_COMMAND                    0x0111

после определенного события PostMessageW(GetForegroundWindow(), WM_COMMAND, 33020, (string) 0);
 
amavladi:
Veuillez indiquer comment prescrire (après un certain événement) une interdiction de l'AutoTrading dans un EA, c'est-à-dire définir par programmation le bouton du terminalAutoTrading à interdire. J'ai essayé d'appeler la constante ACCOUNT_TRADE_ALLOWED et de changer sa valeur en false, mais le compilateur dit que cela n'aura aucun effet ( ACCOUNT_TRADE_ALLOWED == false ; //expression n'a aucun effet)

Cette tâche (interdire à l'EA de commercer) est très facilement résolue avec des sémaphores (true/false.... autoriser/interdire le commerce).

Ou est-il important d'appuyer sur le bouton "Auto Trade" ?

 
charter:

Cette tâche (interdire à l'EA de commercer) est très facilement résolue avec des sémaphores (true/false.... autoriser/interdire le commerce).

Ou est-il si important d'appuyer sur le bouton "AutoTrading" ?

Si je ne peux pas désactiver l'AutoTrading pour l'ensemble du terminal, alors bien sûr je le ferai. Le problème est que j'ai plusieurs Expert Advisors en cours d'exécution sur mon terminal et je

Je veux utiliser un EA séparé pour surveiller l'équité et désactiver l'AutoTrading pour tous les EAs simultanément en cas d'urgence, par exemple, lorsque l'Aquity est réduit de 50%.

 
amavladi:

Si je ne peux pas interdire l'AutoTrading pour l'ensemble du terminal, je le ferai sûrement. Le problème, c'est que j'ai plusieurs conseillers-experts qui fonctionnent sur mon terminal et que je...

Je voulais utiliser un seul EA pour surveiller le profit du compte et désactiver l'AutoTrading pour tous les EA en même temps en cas d'urgence, par exemple, lorsque le profit du compte chute de 50%.

Je ne l'ai pas vérifié du tout. Vous devez remplacer WinUser32.mqh par le fichier joint pour que cela fonctionne.

Je l'ai vérifié maintenant, ça marche. Et voici d'autres gadgets

#include <WinUser32.mqh>

void OnTick()
{
 после определенного события wCommands(20); 
}

void wCommands(int com)
{
switch(com)
{
case  1:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33137, (string)0); return; //M1 |
case  2:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33138, (string)0); return; //M5 |
case  3:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33139, (string)0); return; //M15 |
case  4:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33140, (string)0); return; //M30 |
case  5:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33135, (string)0); return; //H1 |
case  6:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33136, (string)0); return; //H4 |
case  7:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33134, (string)0); return; //D1 |
case  8:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33141, (string)0); return; //W1 |
case  9:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33334, (string)0); return; //MN |
case 10:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33050, (string)0); return; //Удалить эксперт |
case 11:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 35426, (string)0); return; //Удалить скрипт |
case 12:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 57602, (string)0); return; //Закрыть окно текушего графика |
                                                                           57604              //Сохранить как
                                                                           57607              //Вызов диспетчера печати
                                                                           57608              //Печать графика
                                                                           57609              //Предварительный просмотр
case 13:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33048, (string)0); return; //Вызов свойств экстерта |
case 14:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33157, (string)0); return; //Вызов свойств графика |
case 15:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33025, (string)0); return; //Увеличение масштаба |
case 16:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33026, (string)0); return; //Уменьшение масштаба |
case 17:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33018, (string)0); return; //Переключение на бары |
case 18:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33019, (string)0); return; //Переключение на свечи |
case 19:        PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33022, (string)0); return; //Переключение на линию |

case 20:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33020, (string)0); return; //Переключение кнопки советника |
case 21:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35429, (string)0); return; //Окно логина и пароля |
case 22:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 37400, (string)0); return; //Пересканировать сервера |
case 23:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35403, (string)0); return; //Глобальные переменные |
case 24:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 35419, (string)0); return; //Список индикаторов |
case 25:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33265, (string)0); return; //Открывает окно настройки |
case 26:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33262, (string)0); return; //Архив катировак |
case 27:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33309, (string)0); return; //Обзор рынка |
case 28:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33310, (string)0); return; //Навигатор |
case 29:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33314, (string)0); return; //Терминал |
case 30:        PostMessageA(GetForegroundWindow(), WM_COMMAND, 33315, (string)0); return; //Тестер стратегий |
}
}


Et j'ai corrigé le post précédent pour que cela fonctionne sans remplacer WinUser32.mqh

Dossiers :
winuser32.mqh  71 kb
 

Salutations à tous... Je sais que le problème est le suivant. Lorsque je compile le code, la variable d prend la valeur 110 et l'indicateur affiche tout correctement, mais avec l'arrivée d'une nouvelle barre, la variable devient 109 et, par conséquent, cela fait complètement foirer toutes les lectures de l'indicateur. J'ai déjà tout foutu en l'air. ..... C'est quoi ce bordel ? ? ???

int start()
  {
  int limit,Val,Oi;
  
   drawonce();
//limit=Bars;
if (b!=Bars){
b=Bars;
datetime ldt_BeginDay = iTime (NULL, PERIOD_D1,Q); 
int li_Bar = iBarShift (NULL, 0, ldt_BeginDay);
d=0;

 for(int i=li_Bar-10; i>=0; i--){  
 
 
if (curDay!=TimeDay(Time[i])) {

curDay=TimeDay(Time[i]);
OOO=iClose(NULL,PERIOD_D1,Q-d+1)-iOpen(NULL,PERIOD_D1,Q-d+1);
if (volarr[Q-d]!=0) Val=volarr[Q-d]-volarr[Q-d+1];
if (oiarr[Q-d]!=0)  Oi=oiarr[Q-d]-oiarr[Q-d+1];
d++;
}
Buffer1[i]=Val;
Buffer2[i]=Oi;
Buffer3[i]=OOO;

}   
   
   
}
   
   WindowRedraw();
   Comment(Q,"   ",d);
   return(0);
  }

Pourquoi pendant la compilation une valeur est variable, mais avec l'arrivée d'une nouvelle barre la variable change ?????.

 
Eh bien..... dans mon cas, même les professionnels sans forte ????
 
Quelqu'un peut-il expliquer la différence entre la compilation et l'arrivée d'une nouvelle barre????.