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

 
Alexey Viktorov:

変数文字列x;は、文字列文字 "x "と混同しないでください。

具体的なタスクがわからなかった。したがって、具体的な回答はありません。

関数のオーバーロードについて考えた方がいいのでは?

そこで、渡されたパラメータ(..., ..., string x, string y)によって文字列変数 object_xy の名前が変わることをメインプログラムが理解できるような汎用関数function_xy を作成する必要がある、という状況です。そうしないと、さらに下のfunction_xy()の中で、変数object_xyの名前を手動で綴らなければならなくなります。
例えば、こんな感じです。

void function_xy(..., ..., string x="EURUSD", string y="GBPUSD")
{
...
string object_xy=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
}

そうしないと、function_xy()で複数のグラフィカルオブジェクトを作成するときに、グラフィカル関数のパラメータを手動で割り当てる必要があります。

void function_xy(..., ...,...)
{
...
string object_EURUSDGBPUSD=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_EURUSDGBPUSD,...,...)
ObjectSet(object_EURUSDGBPUSD,...,...)
ObjectSetText(object_EURUSDGBPUSD,...,...)
...
}

void function_wz(..., ...,...)
{
...
string object_USDCHFUSDJPY=...//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD
...
ObjectCreate(object_USDCHFUSDJPY,...,...)
ObjectSet(object_USDCHFUSDJPY,...,...)
ObjectSetText(object_USDCHFUSDJPY,...,...)
...
}

このような機能が200個もあるのですが、なんとかこの問題を減らして解決できませんか?
私の思いが伝わったでしょうか。



 
Timur1988:

状況は、渡されたパラメータ(..., ..., string x, string y)によって、文字列変数 object_xy の名前が変わることをメインプログラムが理解するような普遍的な関数function_xy を作る必要がある、というものです。そうしないと、さらに下のfunction_xy()の中で、変数object_xyの名前を手動で綴らなければならなくなります。
例えば、こんな感じです。

そうしないと、function_xy()で複数のグラフィカルオブジェクトを作成するときに、グラフィカル関数のパラメータを手動で割り当てる必要があります。

このような機能が200個もあるのですが、なんとかこの問題を減らして解決できませんか?
私の思いが伝わったでしょうか。

XとYに応じてオブジェクト名を形成するコードを書くだけで、例えば、n=10*x+yのように配列から取り出すことができるのです。x=0かつy=0...9のとき、最初の10個の要素が選ばれる x=1かつy=0...9のとき、次の10個の要素が選ばれる

 
DOCTORGAD: エラーチェックで1回だけ取引開始するコードはありますか?テスト用ではなく、まさにリアルに...。機能として可能、ただデッドロック :(

ミスをチェックしてどうするんだー!!!!反応しろよーどうやって?Print("Error - ...") - これはデバッグの時だけ有効です。それだって、Alert()よりはマシだろう。エラーに対してポーズ=遅延で対応する必要があります。どこかに記事がありましたね。でも、どこで?もし誰かが見たのなら、私に思い出させてください。

 
Timur1988:

メインプログラムが、渡されたパラメータ(..., ..., string x, string y)に応じて文字列変数 object_xy の名前が変わることを理解できるような普遍的な関数function_xy を作成する必要がある、という状況です。そうしないと、さらに下のfunction_xy()の中で、変数object_xyの名前を手動で綴らなければならなくなります。
例えば、こんな感じです。

そうしないと、function_xy()で複数のグラフィカルオブジェクトを作成するときに、グラフィカル関数のパラメータを手動で割り当てる必要があります。

このような機能が200個もあるのですが、なんとかこの問題を減らして解決できませんか?
私の思いが伝わったでしょうか。





//+------------------------------------------------------------------+
void OnStart()
  {

   function_xy();

  }
//+------------------------------------------------------------------+x1 x2 x3
void function_xy(string x="EURUSD",string y="GBPUSD")
  {
   string object_xy;
  string c = "object_EURUSDGBPUSD";
//Для начала,  склеим переданные в функцию строковые переменные 

   object_xy=StringConcatenate("object_",x,y);
   
   Alert("object_xy = ",object_xy);
   
// Cравниваем
   if(StringCompare(c,object_xy)==0)
     {
      Alert("       Ура получилось ))))))))");
      Alert("object_EURUSDGBPUSD == object_xy");
     }
//то есть здесь программа должна понимать, что это переменная object_EURUSDGBPUSD 
  }
//+------------------------------------------------------------------+

私が正しく理解していれば

というようなことがあります。

 
Ptichka12: こんにちは、括弧は私から血を飲みます私はそれをペアにすることはできません(それはすぐにエラーの束を出す)。括弧は1行目にあります。

それはデコンパイルですか?すぐに削除してください! ここでは禁止されているのです!禁止されている...

 
Ptichka12:

こんにちは、括弧は私から血を飲みます私はそれをペアにすることはできません(それはすぐにエラーの束を出す)。括弧は1行目にあります。


逆コンパイルされたコードを公開すると警告されます。
 
Artyom Trishkin:
逆コンパイルされたコードを投稿したため、警告を受けました。

ごめん、もうやらない...。

 
Alexey Viktorov: は、完全に書き直さなければならない。誰が必要としているのか?

ありがとうございます)
書き換えを避けるために、100pts以上のセグメントには、トレンド ラインを重ねることができるかもしれません。

谷からジグザグの頂点までプロットするために、トレンドラインポイントの座標を設定する方法を教えてください -a.

 

こんにちは。

2週間ほど前から、配列の中の価格が今どうなっているかをチェックするスクリプトを作成しています......。

今、配列の検索で行き詰っているんです。なぜか期待通りのものが出てこない。


int start()
{
   while(!IsStopped())
    {    
      double prmas[5] = {11,22,33,44,99}; // Будем проверять каждую цену, есть ли ордер с такой ценой или нет
         for(int ordsel=0; ordsel<=4;ordsel++) {  // Цикл прохода по ценам в массиве
            for(int nmbr = 0; nmbr < OrdersTotal() ;nmbr++) {   // Проверяем каждую цену по всем ордерам
               int os = OrderSelect(nmbr, SELECT_BY_POS, MODE_TRADES); // Выбираем ордер по порядку цикла
               int maspos = ArrayBsearch(prmas,OrderOpenPrice(),5,0,MODE_ASCEND); //Ищем позицию цены в массиве по текущему проверяемому ордеру
               Alert ("Номер в цикле  ", nmbr, " Выбранный ордер  ", os, " Цена из массива ", prmas[maspos]); //Выводим скорбный результат
               Sleep(10000);  
      }
}
     if(!IsExpertEnabled()) break;
    }
return(nmbr);
}

間違って表示されない...

のワラントがあります。



 
Dimitry-1983:

こんにちは。

2週間ほど前から、配列の中の価格が今どうなっているかをチェックするスクリプトを考えていたのですが......。

今度は配列検索でひっかかった。なぜか、期待通りのものが出てこない。


正しいのです。

ArrayBsearch

戻り値

最初に見つかった要素のインデックスを返す。求められた値が見つからない場合、求められた値が位置する最も近いby value要素のインデックスを返す。

あなたは、注文価格(発注時間による順序)を持っている
は11,00000
第2回目 22.00000
第3位 0.98020
第4位 0.98004
第5回 33,00000円

1、2、5 はそれぞれ正解ですが、2 と 3 は最も近い小さい値が......。



理由: