[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 250

 
ありがとうございました。
 
スクリプトをチャート上にドラッグしても、EAと同じチャートでも別のチャートでも何も起こりません。このスクリプトを使うのは全く初めてです。こんな感じです。
//+------------------------------------------------------------------+
//|                                                   таймфрейм .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                                    |
//+------------------------------------------------------------------+
Expert Advisorはこのような感じです。
//+------------------------------------------------------------------+
//|                                                  таймфрейммм.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                                            |
//+------------------------------------------------------------------+
そして、それぞれバリアントとして。
//+------------------------------------------------------------------+
//|                                                 таймфреймммм.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                                            |
//+------------------------------------------------------------------+

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

このスクリプトは、私のために動作します。

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

このエキスパート、不思議な働きをするんです。効かないとも言える。TF単体では、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);
     }
   }
 }
自然な刻みを待つ。どこからが問題なのかは不明です。MT4の新しいビルドで何かが変更されました。
 
Zhunko:

このスクリプトは、私のために動作します。

このエキスパート、不思議な働きをするんです。効かないとも言える。TF単体では、M5までしか切り替わりません。

自然のダニを待ちます。なぜこのような問題が発生したのかがわからない。MT4の新しいビルドで何かが変更されました。


そうですね、なぜ不具合が多発して応用できないようなソフトが必要なのでしょうか?

標準機能を使っていただければ、すべてうまくいきます。

ティックではなく、チャート上に配置され、手動で更新されるインジケーターです。

設定でDLLを許可することを忘れずに

//+------------------------------------------------------------------+
//|                                                    таймфрейм.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:


そうですね、常に不具合が出て使えないようなソフトがなぜ必要 なのでしょうか?

標準機能を使っていれば大丈夫です。

インジケータはティックではなく、チャートにして手動で更新する必要があります。

ただ、設定でDLLを許可するのを忘れないでください。

えっ、事実を知っているのですか?もし、私が冗談を言っていたとしたら?確認もできない。ある種のスキルが必要なのです。

PostMessage()は私も動作しています。ただ、それは間違っている。SendMessage()でやってみてください。その違いがわかるといいのですが。

ルスタム 誰もが一番シンプルなソフトを扱えるわけではありません。運が悪かったとしか言いようがない。OSに不具合がある人だっているんです。

 
ありがとうございました!!!!!!!!!!
 

スクリプトが動く!!!!!!

でも、M5にしか切り替わらないんです。

 
Dimka-novitsek:
スクリプトが動く!!!!!!
どれだ?
 

ロールが贈った最後の1枚。 いずれにせよ、少なくともM5では動作していますし、そうでなければ、ここではまだスクリプトやアドバイザーのビジュアルワークを見たことがないのです。このようなスクリプトをここで見るのは初めてです。

どう直せばいいのか、どうすればスマートになるのか、それはわからない。あ、わかりました。