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

 
Igor Makanu:

use https://www.mql5.com/ru/docs/dateandtime/timecurrent

第二版関数呼び出し

一般的には、https://www.mql5.com/ru/docs/dateandtime/timetostruct

貴重な情報をありがとうございました。

どういう構造で、どういう仕組みになっているかは理解していますが、細かいところまではまだ理解できていません。

私はまだ、その微妙なニュアンスをつかみきれていません。わかりやすい例文で、新しい教材をよりよく学べるようになりました。
mql5で以下の条件のコードの書き方を教えていただけると幸いです
構造体を使った注文の開き方は勉強しました。


if(Hour()==10)

をクリックすると、注文が開始されます。

パターンを書かなくても注文を開けることができる...。条件の書き込みのみ。

また、お世話になります。

 
Igor Makanu:

は、バーの価格と時間をどのように決定したいかでなければなりません。

というか、チャート上の時間+価格値におけるマウスクリックの座標であり、バーはiBarShift()で定義する必要があります。

そう、それが、さらに理解されるのです。ありがとうございました)

 
ANDREY:

貴重な情報をありがとうございました。

どういう構造で、どういう仕組みになっているかは理解しているが、内情はまだ把握できていない

新しい教材は例題で覚えた方がいいんです。わかりやすい例文で、新しい教材をよりよく学べるようになりました。
mql5で以下の条件のコードの書き方を教えていただけると幸いです
構造体を使った注文の開き方は既に勉強済みです。


if(Hour()==10)

をクリックすると、注文が開始されます。

パターンを書かなくても注文を開けることができる...。ただ、状態の記録です。

また、お世話になります。

MqlDateTime time_now;
TimeCurrent(time_now);
if(time_now.hour==10)
{
//открыть ордер
}
 
Igor Makanu:

どうもありがとうございました。すべてが明確に、理解できるようになりました。

 

皆さんこんにちは!
私はmql4からmql5への移行を試みています。私はテストのために注文を開く簡単なコードを作成しました。テスターでは、EAが注文を開く。Print()という関数をvoid OnTick()関数の先頭に置き、Expert Advisorが1ティック ごとにこの関数に入り、ジャーナルのティックごとに印刷されるようにしました。そして、5回目にエキスパートアドバイザーはPrint()関数を 何も入力せず、自動車 登録ジャーナルに何も印刷 しません。Expert Advisorでは、可視化および最適化は無効です。
4のように、ティックごとにジャーナルにPrint() が出力されるようにコードを変更する方法をご教示ください。
助けてくれる人に感謝します。

以下は私のコードです。

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult);
    }   
     return;
  }

EAの入金額を10万円まで増やしました。その結果、すべてのティックでジャーナルにPrint()が出力されます...。 しかし、1つの取引もオープンしていません。

しかし、私はそれがお得な情報を開き、Print()印刷さ れるようにする必要があります。

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ANDREY:

皆さんこんにちは!
私はmql4からmql5への移行を試みています。私はテストのために注文を開く簡単なコードを作成しました。テスターでは、私のEAが注文をオープンしています。Print()という関数をvoid OnTick()関数の先頭に置き、Expert Advisorが1ティック ごとにこの関数に入り、ジャーナルのティックごとに印刷されるようにしていました。そして、5回目にエキスパートアドバイザーはPrint()関数を 何も入力せず、自動車 登録ジャーナルに何も印刷 しません。Expert Advisorでは、可視化および最適化は無効です。
4のように、ティック毎にジャーナルにPrint() が出力されるようにコードを変更する方法をご教示ください。
助けてくれる人に感謝します。

以下は私のコードです。

EAの入金額を10万円まで増やしました。その結果、すべてのティックでジャーナルにPrint()が出力されます...。 しかし、1つの取引もオープンしていません。

しかし、私は、取引が開かれ、Print()が印刷された 必要があります。

ログを見る、印刷されたものを見る、各ステップでそこに情報が入力されている。おそらく、注文の開始時に何か問題があり、EAが動作していないのだと思います。

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

 
Igor Makanu:

MQL4から端末データに繰り返しアクセスする必要があるかどうかは、すでに説明したとおりですが、次にOrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716

1秒間に数百万回出力が増加するので、1ティックあたり100500回使うことも可能だと思います。


マーケットウォッチウィンドウに表示されるシンボルの数が多ければ多いほど、端末の負荷も大きくなります。

つまり、端末を賢く使えば、何もフリーズすることはありません。マーケットウォッチウィンドウには、使用する10個のシンボルがあります。


同時に開くことのできるチャートの 数は確認していませんが、ヒストリーを1000本までに制限すれば、数十個のチャートウィンドウを問題なく開くことができると思います。

100

 
Valeriy Yastremskiy:

ログを見ると、各ステップで記録された情報が印刷されているんです。おそらく、注文を開始する際に何か問題があり、EAが動作していないのでしょう。

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

ご指摘ありがとうございます。

本当にダメなんです。と書かれています。

2020.10.27 06:40:45.311 テスター EURUSD: 履歴データは2018.01.02 00:00から開始 されます。

2020.10.27 06:40:45.312 Core 1 connecting to 127.0.0.1:3000

2020.10.27 06:40:45.312 Core 1 接続し ました。

2020.10.27 06:40:45.320 Core 1 authorized (agent build 2650)

2020.10.27 06:40:45.323 Tester EURUSD,M1 (Alpari-MT5-Demo): expertsGRAAL.ex5 のテスト 2020.09.01 00:00 から 2020.09.03 00:00 まで

2020.10.27 06:40:45.327 Core 1 共通の同期が完了しま した。

2020.10.27 06:40:45.328 Tester 解析した履歴の品質は100% です。

2020.10.27 06:40:45.348 Core 1 test expertsGRAAL.ex5 on EURUSD,M1 thread finished.

2020.10.27 06:40:45.348 コア1

2020.10.27 06:40:45.348 Core 1 ログイン (ビルド 2650)

2020.10.27 06:40:45.348 Core 1 通貨が USD のアカウント情報が見つ かりました。

2020.10.27 06:40:45.348 Core 1 1482 バイトのテスター・パラメータをロード

2020.10.27 06:40:45.348 Core 1 1724 バイトの入力パラメータを読み込んだ

2020.10.27 06:40:45.348 Core 1 利益をpipsで計算、初期預金10000円、レバレッジ1:100

2020.10.27 06:40:45.348 Core 1 正常に初期化されました

2020.10.27 06:40:45.348 Core 1 合計731バイトの初期化データを受信 しました。

2020.10.27 06:40:45.348 Core 1 Intel Core i5-6400 @ 2.70GHz、7883MB。

2020.10.27 06:40:45.348 Core 1 EURUSD: 同期されるシンボル

2020.10.27 06:40:45.348 Core 1 EURUSD: シンボルは既に同期、18バイトを受信

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 2019.01.02 06:00 からキャッシュされた履歴が ある。

2020.10.27 06:40:45.348 Core 1 EURUSD,M1 (Alpari-MT5-Demo): 各ティック生成

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: tests of expertsGRAAL.ex5 from 2020.09.01 00:00 to 2020.09.03 00:00 started with inputs:

2020.10.27 06:40:45.348 Core 1 StopLoss=30

2020.10.27 06:40:45.348 Core 1 TakeProfit=100

2020.10.27 06:40:45.348 Core 1 Lot=0.1

2020.10.27 06:40:45.348 Core 1 最終残高 10000.00 pips

2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 bars generated.テストは0:00:00.019で通過しました。

2020.10.27 06:40:45.348 Core 1 270 Mbのメモリ使用、35 Mbのヒストリーデータ、64 Mbのティックデータを含む。

2020.10.27 06:40:45.348 Core 1 log file "C:\Usersa1960﹑AppData﹑Roaming﹑MetaQuotes﹑Tester36A64B8C79A6163D85E6173B54096685 ◇Agent-127.0.0.1-3000 ◇logsⒸ20201027.log translated translated by YAYOI

2020.10.27 06:40:45.371 Core 1 接続を終了 しました。

1日単位でテストしています。つまり、Expert Advisorは1440個の注文を開く必要があります。問題なのかもしれません。もしかしたら、同時に開く注文の数に制限があるのかもしれませんね。
確認したところ、EAの預かり金が1万あったときに、300件しか注文を開かず、残りをお金に関する何らかの理由で取り逃がしたからかもしれません(仕訳で理解しました)。その後、EAの預かり金を10万円に増やしたところ、それ以上飛ばす権利がなくなりました。そして、注文を受け付けるのを完全に止めてしまった。

しかし、その後、EAの預かり金を再び1万円に減らした。しかし、私のExpert Advisorは相変わらず何も開かず、常に私が上に述べた値を書き込んでいます。

もう1つEAを作りました。そこに同じコードをダウンロードした。10,000のデポジットがあります。私は同じ問題を得た:私は注文を開いていない。
私のEAを正しく動作させる方法をご教示ください。同じメッセージが送信されますが、私の強調された黄色の線は270 mbではなく271 mbとなっています。
私はWindows 10を使用しています。64bit OSと8GB RAMを使用しています。
ありがとうございます。

 
ANDREY:

ご指摘ありがとうございます。

本当にダメなんです。と書かれています。


2020.10.27 06:40:45.348 Core 1 EURUSD,M1: 111967 ticks, 2880 bars generated.0:00:00.019にテストが通過しました。

2020.10.27 06:40:45.348 Core 1 270 Mbのメモリ使用、35 Mbのヒストリーデータ、64 Mbのティックデータを含む。

2020.10.27 06:40:45.348 Core 1 log file "C:\Usersa1960﹑AppData﹑Roaming﹑MetaQuotes﹑Tester36A64B8C79A6163D85E6173B54096685 ◇Agent-127.0.0.1-3000 ◇logsⒸ20201027.log written.

2020.10.27 06:40:45.371 Core 1 接続を終了 しました。

1日単位でテストしています。つまり、Expert Advisorは1440個の注文を開く必要があります。問題なのかもしれません。もしかしたら、同時に開く注文の数に制限があるのかもしれませんね。
確認したところ、EAの預かり金が1万あったときに、300件しか注文を開かず、残りをお金に関する何らかの理由で取り逃がしたからかもしれません(仕訳で理解しました)。その後、EAの預かり金を10万円に増やしたところ、それ以上飛ばす権利がなくなりました。そして、注文を受け付けるのを完全に止めてしまった。

しかし、その後、EAの預かり金を再び1万円に減らした。EAは相変わらず何も開かず、常に私が指摘したことを一番上に書き込んでいます。
どうすれば私のEAを正常に動作させることができるのか、アドバイスをお願いします。
必ず以前のように使えるようにする。

1日に1440件の注文がある場合、Expert Advisorは、分足の開始を確認するか、より簡単には1分足のバーの出現を確認する必要があります。そして、この瞬間に開くのです。あなたはそれを持っていないので、EAはすべてのティックでポジションを開き、それは現在の引用符で私たちのシンボルによると厳しい条件そのものである。この条件が満たされないと、ダニを見逃してしまうことがあります。そしてある時、重大なエラーが発生する。

また、注文執行の 種類(ポジションを作成するための注文) All or nothing.

input int      StopLoss=30;      // Stop Loss
input int      TakeProfit=100;   // Take Profit
input double   Lot=0.1;          // Количество лотов для торговли
int A;    //

//+------------------------------------------------------------------+
void OnTick()
  {
Print( "====================================================",  TimeCurrent() )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if(!SymbolInfoTick(_Symbol,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL;                                  // немедленное исполнение
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);           // последняя цена Bid
         mrequest.sl = NormalizeDouble(latest_price.ask + StopLoss*_Point,_Digits); // Stop Loss
         mrequest.tp = NormalizeDouble(latest_price.ask - TakeProfit*_Point,_Digits); // Take Profit
         mrequest.symbol = _Symbol;                                            // символ
         mrequest.volume = Lot;                                                // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK;                            // тип исполнения ордера - все или ничего
         mrequest.deviation=100;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend(mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
    }   
     return;
  }
 
int M = TimeMinute(TimeCurrent());
int TimeServer()                                                  
{  
   Print(M, " - Tекущее время сервера");
}

アドバイスお願いします

新しいティックが入ったときにサーバーの時刻が更新されないのはなぜですか?

EAが起動した瞬間は全て正常に動作しているのですが、その後時間が経過しても現在の分の新しい値が変数に入ってきません。

つまり、変数int M = TimeMinute(TimeCurrent()) で得られる数値によってExpert Advisorが動作するのです。

実はこのコード行はリファレンスにあったもので、うまくいかないのです。

たとえば、12時に起動すると サーバーから返された現在の時刻は 変数内の時刻に対応しますが、その後、時計ではすでに15~20分経過しているにもかかわらず、変数は12時のままです

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...