初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1446

 
Alexey Viktorov #:

1.ベースハンドルを受け取らない場合は、ベースを閉じる必要はない。

2.INVALID_HANDLEを受信した場合、なぜプログラムの実行を続けるのか?この場合、中断してリターンした方が良いと思います。

私は今、存在しないデータベースを開いたり閉じたりを繰り返していますが、エラーのプリントアウトを得ることができません。このプリントアウトは、オープンできなかったベースへのクエリを作成する瞬間に表示されるのだと思います。

1秒ごとにデータベースのレコードを更新する最小限のテストExpert Advisorを作ってみます。10ペアで実行すれば、すべてが明らかになるだろう。それをここに掲載する。
 
Evgeny Dyuka #:
1秒ごとにデータベースのレコードを更新する最小限のテスト用Expert Advisorを作成します。10ペアで実行すれば、すべてがクリアになる。ーここにー

興味深い。ー待ってますな。

 
Alexey Viktorov #:

興味深い。待っているよ...。

これがエキスパートだ。これは(まだ存在していなければ)ベースを作成し、1秒に1回現在の時刻を書き込む。
コードにはPrint()はありません。
10組で実行したところ、エラーが出ました:

CS      2       11:44:36.561    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:27.018    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:28.026    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:49.177    Test_DB (TRXUSD,M10)    database error, database is locked
CS      2       11:55:51.183    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:53.182    Test_DB (TRXUSD,M10)    database error, database is locked

エラーが発生するには、MT5を終了して再起動する必要があります。


1.
2.ベースが利用できない場合にキューに入れるテンプレートメカニズムを考案する。



UPDATE: ファイルを再アップロードしました。最初のものはエラーがありました

ファイル:
Test_DB_1.mq5  3 kb
 
Evgeny Dyuka #:

これがエキスパートだ。これは(まだ存在していなければ)ベースを作成し、1秒に1回現在の時刻を書き込む。
コードにはPrint()はありません。
10組で実行しましたが、エラーが発生しました:

エラーが発生した場合は、MT5を終了して再起動すると、すべてのExpert Advisorが同期して動作し始めます。


1.
2.ベースが利用できない場合にキューに入れるテンプレートメカニズムを考案する。



UPDATE: ファイルを再アップロードしました。最初のものはエラーがありました

残念ながら、私の知識は十分ではない。エラーが出力されていることに気づくのに十分なだけだ。

      DatabaseExecute(db, sql);

クエリーを作成する前に可用性をチェックすることはできません。

データベースは開きますが、クエリを作成することはできません。

 
サーバー上で注文が開いておらず、ストップとテイクがなく、アルゴ・モードが有効で、セットアップ・コマンドはパスしますが、ログはサイレントCTrade クラス です。テスターでは実際の取引は無音で動作します。何をチェックすべきでしょうか?
 
mwwm CTrade クラス です。テスターでは実際の取引は無音で動作します。何を確認すればよいでしょうか?

ターミナルログ

 
Vladimir Deryagin #:

ターミナルログ

ログをオンにしたはずなのに、ロットが計算できない。なぜ実際の計算をしたくないのか理解できない。

void OpenBuy(const int index,double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);
   double long_lot=0.0;
   if(InpLotOrRisk==risk)
     {
      long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", OK: ","sl=",DoubleToString(sl,m_symbol.Digits()),
               ", CheckOpenLong: ",DoubleToString(long_lot,2),
               ", Balance: ",    DoubleToString(m_account.Balance(),2),
               ", Equity: ",     DoubleToString(m_account.Equity(),2),
               ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(long_lot==0.0)
        {
         ArrayRemove(SPosition,index,1);
         if(InpPrintLog)
            Print(__FILE__," ",__FUNCTION__,", ERROR: ","CMoneyFixedMargin.CheckOpenLong returned the value of 0.0");
         return;
        }
     }
 
mwwm #:

ログをオンにしても、ロットの計算ができないんだ。なぜ実際の計算をしたくないのか理解できない。

ログがないので、何倍もの推測が可能です。

ークロスをークするとき、ークロスのークオプションとしてーク市場概要にーク入金通貨でークロスのーク通貨をークオプションでークオプションのークロスをーク通貨をーク通貨をーク通貨を。

ー例えばーEURJPY、ー入金通貨USD、ー市場概要にーEURUSDとーUSDJPY。

 
Aleksandr Slavskii #:

過去ログがないのだから、その何倍もの推測があり得る。

オプションとして、クロスを取引するとき、市場概要で預金通貨とのペアが選択されていない場合は、取引されません。

例えば、私たちはEURJPY、預金通貨USDを取引し、市場の概要にEURUSDとUSDJPYが存在する必要があります。

XAUUSDを取引するUSDプロセントのアカウント

 

皆さん、こんにちは。MQL5でバッファを使用して最初のバーに1つの矢印を描くことができません。

MQL4では以下のようにしています:

グローバル変数 double XX[] を宣言します;

initに書き込みます:

SetIndexBuffer(0,XX);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,108);

Oncalculateではこう書く:

XX[1]=High[1];と書くと、ローソク足1の上に矢印が描かれる。

MQL5でも同じことをする:

グローバル変数double XX[]を宣言 する;

init.Logに書き込む:

SetIndexBuffer(0,XX,INDICATOR_DATA);

PlotIndexSetInteger(0,PLOT_ARROW,108);

Oncalculateでは こう書く:

XX[1]=high[1];-描画されない。

XX[1]=iHigh(Symbol(),PERIOD_CURRENT,1);-これも描画されない。

もちろん、ヘッダでも指定されている:

#プロパティ indicator_buffers 1

#プロパティ indicator_plots 1

#プロパティ indicator_type1 DRAW_ARROW

#プロパティ indicator_color1 clrGreen

#プロパティ indicator_width1 1

私は何を間違えているのでしょうか?

理由: