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

 
tara:
2つでどうでしょう?
それから、名前がアルファベット順になっています。
 
     // Проверяем все открытые ордера---------------------------------------------------------------------------

    for(n=0,i=0;i<OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()<MAGIC+1 || OrderMagicNumber()>MAGIC+3) continue;
      no=OrderMagicNumber()-MAGIC;
      
      if(no==1)
      {
         n++;
         if(OrderType()==OP_SELL) { if(OrderOpenTime()>=ltts && BSo1==OP_SELL) s1=true; 
         if(MathAbs((OrderOpenPrice()-NormalizeDouble(Bid,Digits))/Point)<Add){OS1=1;} // Запрет на открытие селл

            } else
         if(OrderType()==OP_BUY) { if(OrderOpenTime()>=lttb && BSo==OP_BUY) b1=true;
         if(MathAbs(OrderOpenPrice()-NormalizeDouble(Ask,Digits))/Point<Add){OB1=1;} // Запрет на открытие бай
         }     
      }
   }
こんにちは。
タスクは、すでに開いている注文から一定の距離「追加」で注文を開くことです。
買い注文と売り注文を別々に管理します。
このようなコードを書きました。動作しているようですが、時々、価格が「追加」よりも長い距離をカバーしているにもかかわらず、注文が開かれないことがあります。
プリントを試しましたが、「追加」条件が正しく動作せず、何が問題なのかわかりません。
もしかしたら、誰かが教えてくれるかも?
 

拝啓、requoteに 関連する問題の解決に頭を悩ませています。

状況:Expert Advisorは、ハードストップとピップでのテイクオーバーでマーケットから注文を開き、クローズドバー、M15で動作します。注文を開くシグナルを受信し、Expert Advisorが何度か注文を開こうとしますが、失敗します。次のバーでシグナルが繰り返され、Expert Advisorが取引を開始しますが、レートは最初のシグナルが出されたポイントから外れています。ストップ&テイクは、最初にシグナルが発生したレートからではなく、取引が開始されたレートから設定されることが判明しました。ストップ&テイクを設定する際に、Expert Advisorが最初のシグナルを受信した価格を取るような構造を書きました。

  if(sg==1 && TimeCurrent()-buy_time>=1800) {buy_price=Ask;buy_time=TimeCurrent();}//
  if(sg==-1 && TimeCurrent()-sell_time>=1800) {sell_price=Bid;sell_time=TimeCurrent();}//
где,
sg==1 сигнал на покупку
sg==-1 сигнал на продажу
buy_time - переменная в которую запоминаем время поступления сигнала на покупку
sell_time - переменная в которую запоминаем время поступления сигнала на продажу

при выставлении ордера стоп и тейк прибавляем/вычитаем не от текущей цены а от buy_price и sell_price

なぜ最初のシグナルを使いたいかというと、ストップとテイクサイズはテスターで選択されたもので、ある種最適なのですが、2番目のシグナルからストップ/ストップを設定すると、実際の取引の開始レートが最初のシグナルでのレートと異なるため、最適ではないことが判明するからです。

 
evillive:

トレードはオーダートータル-1、つまり一番古いオーダーに到達することはない。次に、注文の新しいものから古いものへとトロールし、古いものはトロール船が到達する前にストップやテイクでクローズされることがあります。一般的に、何がうまくいかないのか、エラーログはあるのか?


TSが全く機能しません。何度か「設計通り」にポジションが閉じない ことに気づきました。エラーログはありませんが、どうすれば取得できるのでしょうか?

また、決済注文については、多通貨のEAですが、1通貨1回の取引に制限があるため、詳細を書いていただけないでしょうか。

 
Stells:
こんにちは。
タスクは、すでに開いている注文から一定の距離「追加」で注文を開くことです。
買い注文と売り注文を別々に管理します。
このようなコードを書きました。動作しているようですが、時々、価格が「追加」よりも長い距離をカバーしているにもかかわらず、注文が開かれないことがあります。
プリンターも試しましたが、「追加」条件が正しく動作せず、何が問題なのかわかりません。
もしかしたら、誰かが教えてくれるかも?


イゴール・キムの特徴を、シンプルに、便利に。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |7
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает расстояние в пунктах между рынком и ближайшей       |
//|             позицей                                                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    op - торговая операция          (    -1      - любая позиция)           |
//|    mn - MagicNumber                (    -1      - любой магик)             |
//+----------------------------------------------------------------------------+
int DistMarketAndPos(string sy="", int op=-1, int mn=-1) {
  double d, p;
  int i, k=OrdersTotal(), r=1000000;

  if (sy=="" || sy=="0") sy=Symbol();
  p=MarketInfo(sy, MODE_POINT);
  if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (OrderType()==OP_BUY) {
            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
          if (OrderType()==OP_SELL) {
            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;
            if (r>d) r=NormalizeDouble(d, 0);
          }
        }
      }
    }
  }
  return(r);
}
 
Sancho77:

拝啓、requoteに関連する問題の解決に頭を悩ませています。

状況:Expert Advisorは、ハードストップとピップでのテイクオーバーでマーケットから注文を開き、クローズドバー、M15で動作します。注文を開くシグナルを受信し、Expert Advisorが何度か注文を開こうとしますが、失敗します。次のバーでシグナルが繰り返され、Expert Advisorが取引を開始しますが、レートは最初のシグナルが出されたポイントから外れています。ストップ&テイクは、最初にシグナルが発生したレートからではなく、取引が開始されたレートから設定されることが判明しました。ストップ&テイクを設定する際に、Expert Advisorが最初のシグナルを受信した価格を取るような構造を書きました。

なぜ最初のシグナルを使いたいかというと、ストップとテイクサイズはテスターで選択されたもので、ある種最適なのですが、2番目のシグナルからストップ/ストップを設定すると、実際の取引の開始レートが最初のシグナルでのレートと異なるため、最適ではないことが判明するからです。

その結果、最適性はtpとslのレベルだけで 決まり、取引価格は どのようなものでもよいことがわかった。それは論理的ではありませんね。
 
alsu:
その結果、最適性はtpとslのレベルのみによって 決定され、取引価格はどのようなものでもよいことが判明した。論理的とは思えません。

最適性は、ストップとテイクによって決定されるだけでなく、それは主に取引を開くための信号のパラメータによって決定される、私は私の質問をオーバーロードしないように、これらの信号を与えていない、実際には信号のパラメータは、問題の問題に関連していない。取引価格は、取引開始の信号が保存されていれば、どのようなものでもよい。

私の質問の本質、つまり、ストップ&テイクを計算するレベルの計算コードが正しく書かれているかどうかについて、ご意見をいただければ幸いです。

 
Sancho77:

手元にコードがないのですが、似たようなことを自分でもやっていました。シグナルがあったバーの時間を記憶しておいて、このシグナルを使って注文が出たらシグナルの時間をゼロにする、というようなことです。

datetime buy_time,sell_time;
int init(){
   buy_time = 0;
   sell_time = 0;
}
int start(){
   if(buy_time==0 && Open[1]>Close[2]) buy_time = TimeCurrent();
   .......
   if(buy_time!=0){
      OrderSend(.........);
      buy_time = 0;
   }
return(0);
}
もし、質問が再クオートのみとの 戦いについてなら、Igor Kimのスレッドで見てください、注文を出すためのほとんどすべての関数には、何回注文を試みるかについてのパラメータがあります。
 
Sancho77:

最適性は、ストップとテイクによって決定されるだけでなく、それは主に取引を開くための信号のパラメータによって決定される、私は私の質問をオーバーロードしないように、これらの信号を与えていない、実際には信号のパラメータは、問題の問題に関連していない。取引価格は、取引開始の信号が保存されていれば、どのようなものでもよい。

私の質問の本質、つまり、ストップとテイクが正しく計算されるレベルの計算のためのコードが書かれているかどうかについての意見を教えていただければ幸いです。

はい、正しく書かれていますが、状況を想像してみてください。例えば、取引の「本当の」価格が、記憶していたTPより高くなった場合、あなたはどうしますか?(そして、この状況はかなり現実的です - 再クオートは、価格がジャンプするとき、高速市場で頻繁にあります)。
 
alsu:
文章は正しいのですが、状況を想像してみてください。例えば、取引の「本当の」価格が、記憶していたTPより高いことが判明した場合、どうするか?(そして、この状況はかなり現実的です - 再クオートは、価格がジャンプするとき、高速市場でちょうど頻繁にあります) 。

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

もし価格が記憶されたTPよりも高いことが判明した場合、取引は最小限の持ち越しレベルで開始されます。このような処理はEAに内在するものです。

PS ところで、新値が記憶した価格から一定以上離れたらポジションオープン 禁止をかけるようにしないといけないですね、ご考慮ありがとうございます、テスターで確認できればいいのですが、トレードでしか確認できないので。