[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 250

 
Dimka-novitsek:
Es wird kompiliert, aber nicht ausgeführt.

Ich habe es überprüft. ServiceRefreshChart () ist für Sie nicht verfügbar.

Welche Option funktioniert nicht? Das ist schon zu viel. Die Option mit dem Skript und einem separaten Diagramm wird immer funktionieren.

Sie öffnen einen Chart, z.B. EURUSD H1.

2. Im Drehbuch steht dies:

void start()
  {
   int hwndChart = WindowHandle("EURUSD", PERIOD_H1);
   while (!IsStopped())
    {
     for (int i = 0; i < 9 && !IsStopped(); i++)
      {
       ServiceSetTimeframeByNumber(hwndChart, i);
       Sleep(4000);
      }
    }
  }

3. Führen Sie das Skript in einem anderen Diagramm aus.

4. EURUSD H1 Chart wird die TF ändern.

 
Ich danke Ihnen!
 
Ich ziehe das Skript auf den Chart und nichts passiert, weder auf demselben Chart mit dem EA noch auf einem anderen. Ich verwende das Skript zum ersten Mal überhaupt. Es sieht so aus.
//+------------------------------------------------------------------+
//|                                                   таймфрейм .mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <ServicesMT4.mqh>
void start()
  {
   int hwndChart = WindowHandle("EURUSD", PERIOD_H1);
   while (!IsStopped())
    {
     for (int i = 0; i < 9 && !IsStopped(); i++)
      {
       ServiceSetTimeframeByNumber(hwndChart, i);
       Sleep(4000);
      }
    }
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
Der Expert Advisor sieht wie folgt aus.
//+------------------------------------------------------------------+
//|                                                  таймфрейммм.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <ServicesMT4.mqh>
void start()
  {
   int hwndChart = WindowHandle(Symbol(),Period());
   while (!IsStopped())
    {
     for (int i = 0; i < 9; i++)
      {
       ServiceSetTimeframeByNumber(hwndChart, i);
       Sleep(4000);
      }
    }
  }
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
bzw. als Variante.
//+------------------------------------------------------------------+
//|                                                 таймфреймммм.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <ServicesMT4.mqh>
int hwndChart = NULL;
void init()
 {
  hwndChart = WindowHandle(Symbol(),Period()); // Получаем системный дескриптор графика.
  ServiceRefreshChart(hwndChart, 1000); // Запускаем обновление графика каждую 1 секунду.
 }

void start()
 {
  ServiceStopRefreshChart(hwndChart); // Останавливаем обновление. Больше не требуется.
  while (!IsStopped())
   {
    for (int i = 0; i < 9; i++)
     {
      ServiceSetTimeframeByNumber(hwndChart, i);
      Sleep(4000);
     }
   }
 }
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
 

Dieses Skript funktioniert bei mir:

#include <ServicesMT4.mqh>
void start()
  {
   int hwndChart = WindowHandle("EURUSD", PERIOD_H1);
   while (!IsStopped())
    {
     for (int i = 0; i < 9 && !IsStopped(); i++)
      {
       ServiceSetTimeframeByNumber(hwndChart, i);
       Sleep(4000);
      }
    }
  }

Dieser Experte arbeitet auf seltsame Weise. Man könnte sagen, es funktioniert nicht. An sich schaltet die TF nur bis M5.

#include <ServicesMT4.mqh>
int hwndChart = NULL;

void init()
 {
  if (UninitializeReason() != REASON_CHARTCHANGE) hwndChart = WindowHandle(Symbol(),Period()); // Получаем системный дескриптор графика.
  ServiceRefreshChart(hwndChart, 1000); // Запускаем обновление графика каждую 1 секунду.
 }

void start()
 {
  ServiceStopRefreshChart(hwndChart); // Останавливаем обновление. Больше не требуется.
  while (!IsStopped())
   {
    for (int i = 0; i < 9; i++)
     {
      ServiceSetTimeframeByNumber(hwndChart, i);
      Sleep(4000);
     }
   }
 }
Warten auf die natürlichen Zecken. Es ist nicht klar, woher das Problem kommt. In den neuen Builds von MT4 hat sich etwas geändert.
 
Zhunko:

Dieses Skript funktioniert bei mir:

Dieser Experte arbeitet auf seltsame Weise. Man könnte sagen, es funktioniert nicht. Von sich aus schaltet die TF nur bis M5.

Ich werde auf die natürlichen Zecken warten. Ich verstehe nicht, wie das Problem entstanden ist. In den neuen Builds von MT4 hat sich etwas geändert.


Richtig, warum brauchen wir eine Software, die ständig so viele Fehler aufweist, dass es unmöglich ist, sie anzuwenden?

Verwenden Sie die Standardfunktionen und alles wird gut.

Der Indikator wird auf dem Chart platziert und anstelle von Ticks manuell aktualisiert.

Vergessen Sie nicht, DLL in den Einstellungen zuzulassen

//+------------------------------------------------------------------+
//|                                                    таймфрейм.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property indicator_chart_window
#import "user32.dll"
   int   PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
#import
#define WM_COMMAND                     0x0111
int delimiter = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {//return;
   int    counted_bars=IndicatorCounted();
//----
   if(delimiter<3){delimiter++;Comment(delimiter);return(0);}
   delimiter=0;
   fChangePeriod();
//----
   return(0);
  }
//+------------------------------------------------------------------+
void fChangePeriod(){int ii,hwd = WindowHandle(Symbol(),Period());
   switch(Period()){
      case PERIOD_W1    : ii = 33134; break; //PERIOD_D1;
      case PERIOD_D1    : ii = 33136; break; //PERIOD_H4;
      case PERIOD_H4    : ii = 33135; break; //PERIOD_H1;
      case PERIOD_H1    : ii = 33140; break; //PERIOD_M30;
      case PERIOD_M30   : ii = 33139; break; //PERIOD_M15;
      case PERIOD_M15   : ii = 33138; break; //PERIOD_M5;
      case PERIOD_M5    : ii = 33137; break; //PERIOD_M1;
      case PERIOD_M1    : ii = 33141; break; //PERIOD_W1;
   }     
   PostMessageA(hwd, WM_COMMAND, ii, 0);
   return;
}
 
//+------------------------------------------------------------------+
// Скрипт для переключ таймфрейма.
// Для работы скрипта необходимо разрешить вызов функций из системных DLL:
// Сервис -> Настройки  -> Советники -> Разрешить импорт DLL.
#property show_inputs
#import "user32.dll"
        int PostMessageA(int hWnd,int Msg,int wParam,int lParam);
        void keybd_event(int bVk,int bScan,int dwFlags,int dwExtraInfo);
#import
#define WM_COMMAND 0x0111
extern int Per=5;
//+------------------------------------------------------------------+
int  start()
{int wParam,hWnd=WindowHandle(Symbol(),Period());
switch(Per)
        {case PERIOD_M1: wParam=33137;break;
         case PERIOD_M5: wParam=33138;break;
         case PERIOD_M15:wParam=33139;break;
         case PERIOD_M30:wParam=33140;break;
         case PERIOD_H1: wParam=33135;break;
         case PERIOD_H4: wParam=33136;break;
         case PERIOD_D1: wParam=33134;break;
         case PERIOD_W1: wParam=33141;break;
         case PERIOD_MN1:wParam=33334;break;}
PostMessageA(hWnd,WM_COMMAND,wParam,0);
keybd_event(0xD,0,0,0);keybd_event(0x23,0,0,0);return(0);}
//+------------------------------------------------------------------+ 
 
FAQ:


Richtig, warum brauchen Sie eine Software, die ständig so sehr stört, dass sie nicht benutzt werden kann?

Verwenden Sie die Standardfunktionen und Sie werden zufrieden sein.

Der Indikator sollte in einem Diagramm dargestellt und anstelle von Ticks manuell aktualisiert werden.

Vergessen Sie nur nicht, die DLL in den Einstellungen zuzulassen

Was, Sie haben die Fakten? Und wenn ich einen Scherz gemacht habe? Sie werden es nicht einmal überprüfen können. Sie brauchen eine bestimmte Fähigkeit.

PostMessage() funktioniert bei mir auch. Aber es ist falsch. Versuchen Sie es mit SendMessage(). Ich hoffe, Sie kennen den Unterschied.

Rustam, nicht jeder kann mit der einfachsten Software umgehen. Sie haben Pech gehabt. Manche Leute haben sogar ein fehlerhaftes Betriebssystem.

 
Dankeschön!!!!!!!
 

Das Skript funktioniert!!!!!

Er schaltet aber nur auf den M5 um.

 
Dimka-novitsek:
Das Skript funktioniert!!!!!
Welcher ist es?
Grund der Beschwerde: