MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1243

 

ググる気も読む気も微塵もないので、ファイル D:Ⅾ1.txtを開くと

/*
https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutew
HINSTANCE ShellExecuteW(
  HWND    hwnd,
  LPCWSTR lpOperation,
  LPCWSTR lpFile,
  LPCWSTR lpParameters,
  LPCWSTR lpDirectory,
  INT     nShowCmd
);
*/
#import "shell32.dll"
int ShellExecuteW(int hWnd, string lpVerb, string lpFile, string lpParameters, string lpDirectory, int nCmdShow);
#import
#define  SW_SHOW 5
#define  SW_SHOWNORMAL 1
//+------------------------------------------------------------------+
void OnStart()
{
   ShellExecuteW(NULL,"Open","notepad.exe","D:\\1.txt",NULL,SW_SHOW); 
}
//+------------------------------------------------------------------+
 

インジケータで1秒タイマーをスタートさせたり、OnCalculateで時間(秒)を比較したりするには、どうすればよいのでしょうか?

<1秒、終了

それとも、他の働き方があるのでしょうか?

その月のHistorySelectを更新する必要がある +オブジェクトを操作 する必要がある

 
Fast235:

またはOnCalculateの比較時間(秒)において

<1秒、出力

秒では足りません。 問題はdatetimeで、1秒以下にはできません。

ミリ秒単位で比較する

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const LastOnCalculate = GetTickCount(); &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   static uint LastOnCalculate = GetTickCount();
   if(GetTickCount() - LastOnCalculate < 1000) return(rates_total);
   LastOnCalculate = GetTickCount();
   .........
   return(rates_total);
}
Fast235:

インジケータで1秒間のタイマーをスタートさせるのと、OnCalculateで時間(秒)を比較するのと、どちらが良いのでしょうか?


OnCalculateがティックに関連していることだけが重要で、ティックは存在しないためOnCalculateの呼び出しもありません。

Fast235:

HistorySelectを1ヶ月間更新し、オブジェクトを操作 する必要があります。

HistorySelectは 高速ですが、オブジェクトを移動したり作成したりする際に、1000以上のオブジェクトがある場合、ラグが発生する場合があります。

そして、これらのオブジェクトを毎秒修正することになります。


(コードを入力すると、落とし穴がポップアップします ))))

 

私は1秒あれば十分で、ダニが来るまではもっと少ない頻度です

チャート上にトレードを表示し、トレードの 結果をバーで表示し、さらにグローバルトレンドなどの半静的な情報を表示したい。

からの変化を見ることができます。

int OnCalculate (const int rates_total,      // размер массива price[] 
                 const int prev_calculated,  // обработано баров на предыдущем вызове 
                 const int begin,            // откуда начинаются значимые данные 
                 const double& price[]       // массив для расчета 
   );

または2番目のオプションから時間

 

教えてください!

現在のチャートシンボルと必要なチャートシンボルを比較するには?

      case 1 : // кейс для открытия Buy по AUD/USD
               if(Symbol() == (как обозначить нужный символ для сравнения?))                                    // если символ текущего графика AUD/USD открываем сделку
               {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_BUY,Lot(),Ask,0,0,0); // Открытие ордера
//----------------------------------------------------------------------------------------------------
В тоже время советник запущен на другом графике и пытается произвести открытие ордера, цены не совпадают и соответственно вылетает ошибка - неверные цены

      case 2 : // кейс для открытия Bay по GBP/USD 
               if(Symbol() == (как обозначить нужный символ для сравнения?)) 
// если символ текущего графика не AUDUSD то выходим
               {
                  RefreshRates();
                  Open_Order = OrderSend("GBPUSD",OP_SELL,Lot(),Bid,0,0,0); // Открытие ордера

Т.е. надо ему дать понять, что тот или иной кейс принадлежит тому или другому графику, но чтот я пока не придумал как

AUD/USDに注文を出す必要があり、注文を出しました(正常に動作します)。 しかし、プログラムが他の開いているチャートで 注文を出そうとすると(ロボットはいくつかの通貨ペアで動いています)、エキスパートアドバイザーが動いている他の通貨ペアで価格エラーが返されます。比較をして、もしSymbol()==が注文を出すべきシンボルと等しければ、注文を出し、そうでなければ、終了するのです。ターミナルからシンボル名を設定して比較を行う方法がどこにも載っていないのですが、どうすればいいのでしょうか?

 
Denis Diakonov:

教えてください!

現在のチャートシンボルと必要なチャートシンボルを比較するには?

AUD/USDに注文を出す必要があり、注文を出しました(正常に動作します)。 しかし、プログラムが他の開いているチャートで 注文を出そうとすると(ロボットはいくつかの通貨ペアで動いています)、エキスパートアドバイザーが動いている他の通貨ペアで価格エラーが返 されます。比較をして、もしSymbol()==が注文を出すべきシンボルと等しければ、注文を出し、そうでなければ、終了するのです。ターミナルからシンボル名を設定して比較する方法がどこにもないのですが。

最後に適正価格になる例があります。

SymbolInfoDouble - Получение рыночной информации - Справочник MQL4
SymbolInfoDouble - Получение рыночной информации - Справочник MQL4
  • docs.mql4.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 
Denis Diakonov:

ありがとうございます。でも、適正価格は必要ないですね。値段は問題ない。注文を出す通貨ペアが、ロボットが接続されている現在のオープンチャートと 同じでない場合、EAが注文を出さないようにしたい。時間枠のある新しいチャートを開き、その中で希望の注文を出し、その後チャートをクローズすることで実装できるかもしれません。

string  symbol;
....
int OnInit()
{...
 symbol=Symbol();
....
}
void OnTick()
...
 if(symbol == Symbol())
{
...//открываем ордер
}
....
 
Valeriy Yastremskiy:
Valeriy Yastremskiy:

いや、そういうわけにもいかない。

私のプログラムは、現在のチャートにアクセスし、そこに現在の商品名を代入して変数に封入し、この変数の値をチャート上の現在のシンボルと比較します。それは実際にそれ自身と比較する))) Sympol() を、他のどの変数とも比較できるような値に、どうにかして変換する必要があるのです。例えば、こんな感じです。

AUDUSD。

(Symbol()== AUDUSD)

どうにかこうにか-喜び勇んで全部正しく変えているうちに-何も動かなくなりました))

 
Denis Diakonov:

いや、そういうわけにもいかない。

私のプログラムは、現在のチャートにアクセスし、現在の商品名を割り当てて変数に封入し、この変数の値をチャート上の現在のシンボルと比較します。それは実際にそれ自身と比較する))) Sympol() を、他のどの変数とも比較できるような値に、どうにかして変換する必要があるのです。例えば、こんな感じです。

AUDUSD。

(Symbol() == AUDUSD)

私は満足し、すべてを正しく変更するまで、どうにかそれを管理した - 何も動作しません))

文字列 AUDUSD = "AUDUSD";

せめてこんな感じで。

 
Denis Diakonov:

いや、そういうわけにもいかない。

私のプログラムは、現在のチャートにアクセスし、現在の商品名を割り当てて変数に封入し、この変数の値をチャート上の現在のシンボルと比較します。それは実際にそれ自身と比較する))) Sympol() を、他のどの変数とも比較できるような値に、どうにかして変換する必要があるのです。例えば、こんな感じです。

AUDUSD。

(Symbol() == AUDUSD)

どうにかこうにかやって、喜び勇んで全部正しく変えているうちに、何も動かなくなりました))

Expert Advisor、スクリプト、インジケータは適用されませんが、現在のウィンドウで動作します。また、異なるウィンドウ/チャートのグローバル変数が 重なることはありません。したがって、動作するはずです)

string AUDUSD; // これはテキスト変数で、最初は空、つまり""に等しい。

(Symbol() == AUDUSD) // この文字列は変数AUDUSDとは 関係ない。

Symbol
Возвращает имя символа текущего графика.
string  Symbol();
Возвращаемое значение
Значение системной переменной _Symbol, в которой хранится имя символа текущего графика.

しかし、注文の開始基準は、異なる商品/ウィンドウで同じであってはなりません。同じものであれば、確かにすべてのウィンドウで開きます。