"ダミー "からの質問 - ページ 40

 

MetaTrader 5の EAが ストラテジーテスターで 1つもテストされない理由を教えてください。スタートを押しても何も起こらないのですが、説明してください。

 
PATRIOT:

MetaTrader 5の EAが ストラテジーテスターで 1つもテストされない理由を教えてください。スタートを押しても何も起こらないのですが、説明してください。

ログブックを見る(手始めに)。
 

作成した関数の中で、定義済みの構造体からデータを取得できない。例えば、こんな感じです。

void OnTick()
{
//--- Объявляем структуру
 MqlRates rates[];
 ArraySetAsSeries(rates,true);

//--- Скопировать необходимое количество значений в массив
 if(CopyRates(NULL,0,0,4,rates) < 0) { Print(ErrorDescription(GetLastError())); return; }
...
}

そして、作成した関数で値を取得しようとしたとき。

void Trailing_Stop_Loss(ENUM_POSITION_TYPE Type, double Trailing_Stop)
{
 string Val_Time = TimeToString(rates[1].time,TIME_DATE|TIME_MINUTES);

...
}

エラーメッセージが 表示される。

プログラムのすべての部分で使用できるように、構造体を宣言するにはどうしたらよいですか?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
tol64:

作成した関数の中で、定義済みの構造体からデータを取得できない。例えば、こんな感じです。

そして、作成した関数で値を取得しようとしたとき。

エラーメッセージが 表示される。

プログラムのすべての部分で使用できるように、構造体を宣言するにはどうしたらよいですか?

グローバルスコープでは機能外です。
 
トレードスレッドがトレード操作のために空いているかどうかを確認するために使用できる関数は何ですか?MQL4では、IsTradeAllowed()IsTradeContextBusy()関数がこの目的のために用意されました。

標準ライブラリのCAccountInfo クラスには、TradeAllowed() 関数があります。という意味だとヘルプに書かれています。"このアカウントでは 取引が許可されています/禁止されています".トレードサーバーのリターンコードに エラーコードが見当たらなかったので、トレードストリームがビジー状態になっている可能性があります。このチェックは、今は取引端末自体にあるのでしょうか?明確にしてください。


 
tol64:
トレードスレッドがトレード操作のために空いているかどうかを確認するために使用できる関数は何ですか?MQL4では、IsTradeAllowed()IsTradeContextBusy()関数がこの目的のために用意されていました。

標準ライブラリのCAccountInfo クラスには、TradeAllowed() 関数があります。という意味だとヘルプに書かれています。"このアカウントでは 取引が許可されています/禁止されています".トレードサーバーのリターンコードに エラーコードが見当たらなかったので、トレードフローがビジー状態になっている可能性があります。このチェックは、今は取引端末自体にあるのでしょうか?明確にしてください。

MT5では、取引操作は非同期であるため、取引スレッドがビジー状態になることはありません。喜べ。
 
tol64:
トレードスレッドがトレード操作のために解放されているかどうかを確認するために使用できる関数は何ですか?MQL4では、IsTradeAllowed()IsTradeContextBusy()関数がこの目的のために用意されていました。

標準ライブラリのCAccountInfo クラスには、TradeAllowed() 関数があります。という意味だとヘルプに書かれています。"このアカウントでは 取引が許可されています/禁止されています".トレードサーバーのリターンコードに エラーコードが見当たらなかったので、トレードフローがビジー状態になっている可能性があります。このチェックは、今は取引端末自体にあるのでしょうか?説明してください。


MetaTrader5では、ビジー状態の取引スレッドというものは存在しません。MT4では1人のトレーダーの注文しか処理できませんでしたが、MT5では多くの注文が並行して処理されます。注文に対するサーバーからのリターンコードは、OnTrade()関数で取得することができます。
 
uncleVic:

価格を設定するだけでいいのです。

価格が設定されていない場合(デフォルトは0.0)、または市場価格が設定されている場合、CExpertTradeはCExpertから市場でポジションを建てるように 促されます。

市場より良い価格設定(現在の買い値より低く、現在の売り値より高い)であれば、CExpertTradeは指値注文を出します(マージンが尊重される場合)。

価格が市場より低い場合(現在のビッドより上、現在のアスクより下)、CExpertTradeはストップオーダーを出します(インデントが条件です)。

bool Chhhh::OpenLongParams(double& price, double& sl, double& tp, datetime& expiration)
{
   printf("11111111");
   if(2+2==4)
   {
      price=1.5;
      sl=0;
      tp=0;
      expiration=0;
      return(true);
   }
   else
   {
      return(false);
   }
}

int Chhhh::LongCondition()
{
  printf("222222222");
  return(60);
}
OpenLongParamsが全く機能せず、「11111111」すら返さない。
、LongConditionは「2222222」を返して注文を開ける。
何かが間違っているのか、設定が違うのか?
 
sergeev:

具体的な種類は、注文時に設定されます。オーダーセンド
OrderSendは 何の関係があるのですか?
 
Lodar:
OpenLongParamsは全く実行されず、「11111111」すら書きません。 しかし、LongConditionは「222222222」と書いて注文を開けます。 私は何か間違ったことをしていますか、それとも違う設定になっていますか?


原理的には、もっと単純なことです。99%のケースで、入力レベルを入力パラメーターで調整することができます。

input double Inp_Signal_PriceLevel    =0.0;

値は「大」pips(すなわち2/4桁)で設定されます。

値=0 - 市場参入。

値 > 0 - 指値注文でエントリー。

値 < 0 - 逆指値注文でエントリー。

このパラメータは、メイン信号(ウィザードで選択された信号が投票のために収集される)に関連するものです。価格水準設定のアルゴリズムはCExpertSignalの 基底クラス(そのインスタンスがメインシグナル)に既に実装されています。

しかし、実装されているアルゴリズムと異なるものを使いたい場合......。でも、それは後々、面白くなるときのお楽しみです。