Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 945

 
Leo59:

Ich benötige den INITIAL CODE des technischen Indikators IMA, den Indikator, der im MetaTrader4-Terminal unter der Registerkarte "Indikatoren -> Trends -> Gleitender Durchschnitt" aufgerufen wird

Ist es jetzt klarer?

Warum das Rad neu erfinden?

Machen Sie es wie OsMA oder einen anderen 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);
  }
//+------------------------------------------------------------------+

Oder trauen Sie Metaquotes kategorisch nicht?

 

Hallo zusammen. Auf Seite 943 habe ich ein Skript über die Beschreibung der Arbeit und Beispiele von *dll-Bibliotheken veröffentlicht. Ich habe ein wenig herausgefunden, warum das Skript nicht funktioniert.

1. #include<WinUser32.mqh> wird in diesem Fall nicht benötigt.

2. Bedingung separat if(lastkey != 0) Alert("lastkey=",lastkey); gibt den Code der gedrückten Taste stabil korrekt aus. Bei einer Verzögerung ist es keine Frage, wie sie funktioniert.

3. Bedingung separat if(lastmouse != 0) Alert("lastmouse=",lastmouse); gibt stabil 512 aus, auch wenn sich die Maus nicht bewegt. Es ist sehr selten, dass andere Nummern auftauchen.

Als Reaktion auf das Klicken von Maustasten.

4. if(lastwnd != 0) Alert("lastwnd=",lastwnd); gibt eine leere Zeichenkette zurück, höchstwahrscheinlich weil die Bibliothek alt ist und nicht Unicode.

In der Hilfe ist zu lesen, dass der Editor mit *dll-Bibliotheken arbeiten kann, einfach per Drag & Drop in das Editorfenster ziehen. Sie lässt sich nicht öffnen.

Frage. Wird jemand helfen, zu korrigieren "IdleLib.dll" oder besser für Geld. Wenn irgendwo gibt es dieses Thema (und andere *dll) zeigen den Link.

 
Bitte raten Sie mir, wie ich das AutoTrading in meinem EA verbieten kann (nach einem bestimmten Ereignis), d.h. wie ich die Schaltfläche des TerminalsAutoTrading auf verbietensetzen kann.Ich habe versucht, die Konstante ACCOUNT_TRADE_ALLOWED aufzurufen und ihren Wert in false zu ändern, aber der Compiler sagt, dass dies keine Wirkung hat ( ACCOUNT_TRADE_ALLOWED == false; //expression has no effect)
 
Versuchen Sie dies


#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:
Bitte beraten Sie, wie man (nach einem bestimmten Ereignis) ein Verbot von AutoTrading in einem EA vorschreiben kann, d.h. programmatisch die Schaltfläche des TerminalsAutoTrading zu verbieten. Ich habe versucht, die Konstante ACCOUNT_TRADE_ALLOWED aufzurufen und ihren Wert in false zu ändern, aber der Compiler sagt, dass dies keine Wirkung hat ( ACCOUNT_TRADE_ALLOWED == false; //expression has no effect)

Diese Aufgabe (dem EA den Handel zu verbieten) lässt sich sehr einfach mit Semaphoren lösen (true/false.... allow/disallow trading).

Oder ist es wichtig, die Schaltfläche "Automatischer Handel" zu drücken?

 
charter:

Diese Aufgabe (dem EA den Handel zu verbieten) lässt sich sehr einfach mit Semaphoren lösen (true/false.... allow/disallow trading).

Oder ist es so wichtig, die Taste "AutoTrading" zu drücken?

Wenn ichAutoTrading nichtfür das gesamte Terminal deaktivieren kann, dann werde ich es natürlich tun. Die Sache ist die, dass ich mehrere Expert Advisors auf meinem Terminal laufen habe und ich

Ich möchte einen separaten EA verwenden, um das Eigenkapital zu überwachen und das AutoTrading für alle EAs gleichzeitig zu deaktivieren, wenn ein Notfall eintritt, z. B. wenn Aquity um 50 % reduziert wird

 
amavladi:

Wenn ichAutoTrading nichtfür das gesamte Terminal verbieten kann, werde ich das sicher tun. Die Sache ist die, dass ich mehrere Expert Advisors auf meinem Terminal laufen habe und ich

Ich wollte einen EA verwenden, um den Kontoprofit zu überwachen und das AutoTrading für alle EAs gleichzeitig im Notfall zu deaktivieren, z. B. wenn der Kontoprofit um 50 % fällt.

Ich habe es nicht überprüft. Sie müssen WinUser32.mqh durch die angehängte Datei ersetzen, damit es funktioniert.

Ich habe es jetzt überprüft, es funktioniert. Und hier sind noch ein paar weitere Gimmicks

#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; //Тестер стратегий |
}
}


Und ich habe den vorherigen Beitrag so korrigiert, dass es ohne Änderung von WinUser32.mqh funktioniert

Dateien:
winuser32.mqh  71 kb
 

Grüße an alle... Ich weiß, dass das Problem wie folgt aussieht. Wenn ich den Code kompiliere, nimmt die Variable d den Wert 110 an, und der Indikator zeigt alles korrekt an, aber mit dem Eintreffen eines neuen Balkens wird die Variable zu 109, und folglich werden alle Anzeigen des Indikators komplett durcheinander gebracht. Ich habe es bereits vermasselt..... Was zum Teufel????

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

Warum ist während der Kompilierung ein Wert variabel, aber mit dem Eintreffen eines neuen Taktes ändert sich die Variable?????

 
Nun..... in meinem Fall sogar Profis ohne starke????
 
Kann jemand den Unterschied zwischen dem Kompilieren und der Ankunft einer neuen bar???? erklären?