[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 425

 

ピップスでのストップロスを直前のローソク足でのストップロスに変更する必要がある。

ここに、そのコードを、どう置くか。

ありがとうございました。

double x = ... // Задаем на сколько пипсов выше
double sl = NormalizeDouble(High[1] + x * Point, Digits); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
ファイル:
 

プロの皆さん、アドバイスをお願いします。あるサイトを通じてEA(300ドル)を購入し、販売者の指示に従ってインストールしましたが、口座の履歴でテストすると損益がゼロになるか、何かが間違っていると表示されます(もう一度言いますが、私は厳密に指示に従ってインストールしました)。ちなみに、インストール後のExpert Advisorは、まるで活動していないかのように、無料のものの中でグレーになっていました。他の人たちは、青い帽子に黄色い顔というカラーリングでした。Expert Advisorをデモ口座に移しました。笑顔でパソコンに向かう、あるべき姿のすべて。出品者にクレームをつけたところ、「1) 灰色はクローズドコードで、ソースコードでは ありません」と書いてきました。2) 私のExpert Advisorは頻繁に取引しないので、シグナルを待つだけです」。皆さん、待った方がいいのかどうか教えてください。こんなことが可能なのか、それともくだらない詐欺なのか?

 
vpogarcev:

出品者に文句を言ったら、文句を書かれる。"1)グレー色はクローズドコードであり、ソースコードではありません 2) Expert Advisorは頻繁に取引しないので、シグナルを待つだけでよい」。皆さん、待った方がいいのかどうか教えてください。そんなことが可能なのか、それともくだらない詐欺なのか?


1) はい、EAはソースコードがないためグレーです。

待つだけの価値があるかどうかは、誰にもわからない。霊能者は休暇中です。

 
vpogarcev:

プロの皆さん、アドバイスをお願いします。あるサイトを通じてEA(300ドル)を購入し、販売者の指示に従ってインストールしましたが、口座の履歴でテストすると損益がゼロになるか、何かが間違っていると表示されます(もう一度言いますが、私は厳密に指示に従ってインストールしました)。ちなみに、インストール後のExpert Advisorは、まるで活動していないかのように、無料のものの中でグレーになっていました。他の人たちは、青い帽子に黄色い顔というカラーリングでした。Expert Advisorをデモ口座に移しました。笑顔でパソコンに向かう、あるべき姿のすべて。出品者にクレームをつけたところ、「1) 灰色はクローズドコードで、ソースコードでは ありません」と書いてきました。2) 私のExpert Advisorは頻繁に取引しないので、シグナルを待つだけです」。皆さん、待った方がいいのかどうか教えてください。こんなことが可能なのか、それともくだらない詐欺なのか?


せいぜい、すぐに儲からなくなるEAを売ら されただけかもしれません。
 
FAQ:


この場合、例えば18のオブジェクトを削除すると、19がその場所になり、19=>18、つまり自動的に逆反復が1回行われることになりますね。ご注文の際にもご利用ください。

また、オブジェクトとオーダーのリストは形式的に=0から始まる配列なので、最大インデックスは配列のサイズより1つ小さくなります。

最後のお考えで、次のような考察をさせていただきました...。次のような形式のdeinit()関数があるとする。

int deinit()                           // Спец. функция deinit()
  {
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   for(int k=0; k<Quant_Objects; k++)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Если найден объект, …
        {                              // ... начинающийся с Paint_,
         ObjectDelete(Obj_Name);       // … то его и удаляем
        }                              //конец if
     }                                 //конец for
   return;                             // Выход из deinit()
  }                                    //конец deinit
//-------------------------------------------------------------- 10 --

クライアント端末に3つのオブジェクトがあり、そのうち1番目と2番目がdeinit()関数で定義された削除条件に一致したとする。これに対応して、0と1のインデックスが付けられる。そして、最初の反復で変数kは値0を取り、ObjectDelete(0)関数が 対応するオブジェクトを削除します。さらに、オブジェクトのリストは形式的には配列 なので、オブジェクトの1つを削除した後、残りのオブジェクトのインデックスを再作成します(新しいバーを形成して、クライアント端末に現在存在するすべてのバーのインデックスを再作成するようなもの)。そうすると、1番のインデックスを持っていたオブジェクト(規約上も削除しなければならないオブジェクト)がインデックス0になり、インデックス2だったオブジェクトはインデックス1になります。1回目の反復でオブジェクト番号0を削除した後、制御は文字列

for(int k=0; k<Quant_Objects; k++)

を実行すると、式 k++ が表示されます。k変数の値は1になり、Quant_Objects変数の値は3なので、for (k<Quant_Objects) 演算子の条件は真となり、2回目の繰り返しが実行されることになります。しかし、この繰り返しでは、インデックス1(以前は2)のオブジェクトは削除の条件を満たさないので、オブジェクトの削除は行われません。しかし、1番目のオブジェクトが削除された後にインデックスが変更されたため、2番目のオブジェクト(条件により削除されるはずだった)は、変数kが1になった瞬間にそのオブジェクトのインデックスが変更されて0になり、削除操作を「スキップ」したことが判明したのです。この場合、削除するたびにオブジェクトの総数と番号付けが変わるため、一部のオブジェクト名がスキップ されてしまうからです。

私の考え方が正しかったのか、それとも何か間違いがあるのか。

:deinit()関数は、「別に、最初のforループでオブジェクトを削除してはいけないことに注意してください。この場合、削除のたびにオブジェクトの総数とその番号付けが変わるので、いくつかのオブジェクト名がスキップ されます」というフレーズを参照しています。

//--------------------------------------------------------------- 9 --
int deinit()                           // Спец. функция deinit()
  {
   string Name_Del[1];                 // Объявление массива
   int Quant_Del=0;                    // Количество удаляемых объекто
   int Quant_Objects=ObjectsTotal();   // Cтолько всего ВСЕХ объектов
   ArrayResize(Name_Del,Quant_Objects);// Необходимый размер массива
   for(int k=0; k<Quant_Objects; k++)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Найден объект, ..
        {                              // .. начинающийся с Paint_
         Quant_Del=Quant_Del+1;        // Колич имён к удалению
         Name_Del[Quant_Del-1]=Obj_Name;//Запоминаем имя удаляемого
        }
     }
   for(int i=0; i<=Quant_Del; i++)     // Удаляем объекты с именами,.. 
      ObjectDelete(Name_Del[i]);       // .. имеющимися в массиве
   return;                             // Выход из deinit()
  }
//-------------------------------------------------------------- 10 --

P.S. 回答ありがとうございました。

 
7777877:

最後のお考えで、次のような考察をさせていただきました...。次のようなdeinit()関数があるとする。

私の推理は当たっていたのか、それともどこかで間違っていたのか。


ちゃんとしてるじゃないですか。

一般に、削除が発生するループではインデックスリダクションを使用した方がよいでしょう。

int deinit()                           // Спец. функция deinit()
  {
   for(int k=ObjectsTotal()-1; k>=0; k--)  // По количеству объектов 
     {
      string Obj_Name=ObjectName(k);   // Запрашиваем имя объекта
      string Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 сим
      if (Head==Prefix)                // Найден объект, ..
         ObjectDelete(Obj_Name);
     }
   return;                             // Выход из deinit()
  }
 
 

皆さん、OrderSelect() を使えば、簡単に注文の開始価格を知ることができます。チャート上の気配値で、ある価格で注文があるのか、それともこの時点では何もないのかを知ることはできるのでしょうか。この価格で何かがあるかないかを調べるために、チャートの各気配のすべての注文に目を通すのは(特にたくさんある場合)非常に煩わしいです。コードがあれば投げてもらえますか?

 
rosomah:

皆さん、OrderSelect()を使えば、簡単に注文の開始価格を知ることができます。チャート上の気配値で、ある価格で注文があるのか、それともこの時点では何もないのかを知ることはできるのでしょうか?この価格で何かがあるかないかを調べるために、チャートの各気配のすべての注文に目を通すのは(特にたくさんある場合)非常に煩わしいです。コードがあれば投げてもらえますか?

ズボンを頭からかぶるのは不快だ©人は言う。

スルーしているのはあなたではなく、アルゴリズムなのです。もし、あなたがとても不自由しているなら、これらのものをすべて一つの関数にして、必要な結果をオンデマンドで得られるようにすることができます。しかし、関数本体 では、ポジションを1つずつ検索するコードを書かなければならないことに変わりはない。

 
Reshetov:

ありえない。OrderSelect() で1つずつループさせることで、初めて実現します。

OrderSelect() を使って、ループで各注文を通して、すべての注文(ロット)の総量を計算する方法を教えてください。