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

 
どの国か)国旗の意味を書いてください。検索エンジンに入力し、読み取るためのキーは何ですか。
 
false trueということであれば、一度に1つだけ注文を開けるというのは無理があると思います。
 
EAが注文のグリッドを開く方法を教えてください。最高値と最安値の注文を検出する関数を書きました。しかし、最安値または最高値の2番目の注文に関する情報も必要です。
 
Top2n:
false trueということであれば、正確に1つの注文を開くことが可能なのかが理解できません。
シグナルによってオープンされるべきタイプのオープンポジションが すでにあるかどうか」をチェックするのはいかがでしょうか。
すでに存在する場合は、開かないでください。

もし、このタイプのポジションが市場になければ、開設してください。

さて、このチェックと一緒に、他の条件も確認することができます。例:すでにそのようなポジションがあっても、オープンしてから所定の時間が経過すれば、別のポジションをオープンすることができる...。等々

 
DimaMA:
EAが注文のグリッドを開く方法を教えてください。最高値と最安値の注文を決定する関数を書きました。しかし、私は最安値または最高値で2番目の順序についての詳細情報が必要です。ここでは一般的に2番目と最後ではありません。関数を教えてください。 。

すべての注文を循環させ、2次元配列に格納する。配列の1次元目にオーダーが設定された時刻を、2次元目にそのチケットを記録する。配列を日付の降順(1次元)で並べ替える。配列の 1次元目の要素には、最後から2番目の注文の設置日、2次元目には、必要な注文のチケットが格納されます。このチケットで注文を選択し...好きなように使っていただいて結構です。


あるカスタムEAで、最後のポジションのN番目の量に対するブレークイーブンを計算する関数を書いたことがあります。計算は、最後から何番目かのポジションから行う必要があります。どのように実装されているかを見て、何かを得ることができるかもしれません。

//+----------------------------------------------------------------------------+
// Уровень безубытка по символу для N последних позиций, начиная с предпоследней
double LevelPreWLforNpos(int op, int mn1, int mn2, int num) { 
   double lots=0;
   double sum=0;
   int n=0;
   int mass[1][2];
   ArrayInitialize(mass,0);
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderSymbol()!=sy)  continue;
         if (OrderType()!=op)    continue;
         if (OrderMagicNumber()==mn1 || (OrderMagicNumber()==mn2 || OrderMagicNumber()<0)) {
            n++;
            if (n>ArrayRange(mass,0)) ArrayResize(mass, n);
            mass[n-1][0]=OrderOpenTime();
            mass[n-1][1]=OrderTicket();
            }
         }
      }
   ArraySort(mass,WHOLE_ARRAY,0,MODE_DESCEND);
   if (ArrayRange(mass,0)>num+1)  ArrayResize(mass,num+1);
   for (i=1; i<ArrayRange(mass,0); i++) {
      if (OrderSelect(mass[i][1],SELECT_BY_TICKET)) {
         if (OrderCloseTime()==0) {
            if (OrderType()==OP_BUY) {
               lots+=OrderLots();
               sum+=OrderLots()*OrderOpenPrice();
               }
            if (OrderType()==OP_SELL) {
               lots-=OrderLots();
               sum-=OrderLots()*OrderOpenPrice();
               }
            }
         }
      }   
   double price=0;
   if (lots!=0) price=sum/lots;  
   return(NormalizeDouble(price,dg));
}
//+----------------------------------------------------------------------------+
 
Top2n:
false trueということであれば、一度に1つだけ注文を開けるというのは無理があると思います。


ええ、そういうことです。チュートリアルはこちらから ご覧ください。あなたが書いているように、いくつかのより多くの条件を持っているでしょう: "注意質問!)そして、それは(sig1)のために一度開くようにする方法それはそうかもしれませんsig1 - オープンBAY、次のコマンド、sig0 - 入場。 trall(重要ではない)、再び次のコマンド、sig1 - オープン第二BAY" - それは多くの時間ではありませんか?必要ないように思えるのですが.一般的には、フラッグで遊ぶ。

 
Roman.:


そうです、彼らのことです。チュートリアルはこちらから ご覧ください。あなたが書いているように、いくつかのより多くの条件を持っているでしょう: "注意の質問!)そして、それはそうsig1 - オープンBAY、次のコマンド、sig0 - アドミットオンかもしれませんが、(sig1)のために一度開くようにする方法。 トロール(それは問題ではない)、再び次のコマンド、sig1 - オープン第二BAY」 - それは何度もないのですか?必要ないように思えるのですが.一般的には、フラッグで遊ぶ。

ひょっとして、キミは適切な機能を持っているのか?プログラムを乱雑にしないために。注文を開けて落ち着いてもらう必要があるが、1秒で「千」。
 
Top2n:
キムI.V.にふさわしい機能がたまたまあったのでしょうか?プログラムを乱雑にしないために。1 秒で「1000個開ける」のだから、ゆったりと注文を開けてほしい
お好きなものをどうぞ。
 

テスト後にテスト結果(トランザクション)をファイルに書き出したい

deinit()ブロックにtofile()関数を置いた(作業終了後に書き込む)。

が、関数自体は

// Запись профитов в файл
void toFile( )
{
int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","проф");
 
  int total=OrdersTotal();
  // записываем в файл только закрытые ордера
  for(int pos=0;pos<total-1;pos++)
    {
     //FileSeek(handle, 0, SEEK_END);
     if(OrderSelect(pos,SELECT_BY_POS, MODE_HISTORY)==false) continue;
     FileWrite(handle,OrderTicket(),OrderProfit());
    }
  FileClose(handle);
  return;
が動作しない場合、ヘッダのみを記録します。
 
では、どの関数が現在の価格を 返すのか、教えてください。