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

 
皆さん、ごきげんよう。取引を記録し、takeprofitによってクローズ時にクローズしたものと同じパラメータで交換するための保留注文を 作成するロボットが必要です。このようなロボットは実現できるのでしょうか?今まで使ったことがないんです。どこかにあるのなら、リンクをお願いします。よろしくお願いします。
 
従来は、プロフィットクローズは入金通貨で
として計算されていました。
double Lot = 0.1;
int KoffProfit = 10;
ProfitValue = Lot * KoffProfit * MarketInfo(Symbol(), MODE_TICKVALUE); 
この数式をポイントに変換するには?
 

テスターでフクロウを高速化するために、コードを最適化 する方法を考えています。このように、ループの実行を高速化する方法を教えてください。

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  continue; 
   if (OrderSymbol() != Symbol())                    continue;    
   if (OrderMagicNumber() != Magic)                  continue;
   
   // работаем с ордерами      
}

とか、こんな感じ。

for (int i = OrdersTotal() - 1; i >= 0; i--) {
   if (OrderSelect(i, SELECT_BY_POS)) {
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
      // работаем с ордерами
      }
   }
}

とか、EAを高速化するためのヒントがあれば教えてください。

 
T-G: 以前は、Closing on profitは預金通貨で、このようにカウントされていました。
この計算式をポイントに変換するにはどうすればよいですか?
この式は変更する意味がありません。必要な注文を見つけて (OrderSelect()) (OrderOpenPrice()-Bid)/Point ( または OrderOpenPrice()-Ask) を計算し、その注文がすでに何 pips あるか取得する方が簡単です。
T-G:その他、EAを高速化するためのコツはありますか?

mql4では条件の完全チェック、つまりif()内の式は最後までチェックされるので、複雑な条件をいくつかの条件に分割するのが合理的な場合があります。

if(a>b && c>d) は if(a>b){ if (c>d)...... と置き換えることができる。}

だから、あなたが提案するコードの最初のバリエーションは、練習から、少し速く動作しますが - オーダーの列挙は、多くのプロセッサをロードしない、数学演算は多くのプロセッサをロード、それはコードのパフォーマンスを高めるために見て理にかなって - すべての計算は、毎ダニを 実行する必要があるわけではありません。

 
IgorM:

mql4では、if()内にあるすべての式を最後までチェックするフルチェック方式を採用しているため、複雑な条件を複数の条件に分割することが合理的な場合があります。

if(a>b && c>d) は if(a>b){ if (c>d)...... と置き換えることができる。}

だから、あなたが提案するコードの最初のバリエーションは、練習から、少し速く動作しますが - オーダー検索はあまりプロセッサに負荷をかけない、数学演算は多くのプロセッサに負荷をかける、それはコードのパフォーマンスを高めるために見て意味がある - すべての計算は、毎ダニ実行する必要があるわけではありません。

なるほど、ありがとうございます。

Rez = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), iSlippage, Blue);
if (Rez) Comment("Закрыт ордер # ", OrderTicket(), "  прибыль ", OrderProfit());

または条件において同じ正規化を行う。

if (NormalizeDouble(dOrderOpenPriceBuyStop - StepTral * Point, Digits) > NormalizeDouble(Ask + Step * Point, Digits))

は、EAの実行速度を大幅に低下させるのですか?

 
T-G: または条件において同じ正規化を行う。

は、EAの実行速度を大幅に低下させるのですか?

GetTickCount()で自分で確認してみてください。スクリプトを作って正規化を1回1万回、2回1万回実行すれば、正規化がよく実行されるコードセクションを探すのにどれだけ役に立つかを評価することができるはずです。Print()については、私も答えにくいです。Prontaを毎ティック出力するのでしょうか? 通常、出力操作はExpert Advisorの速度を著しく低下させ、Comment()付きのスクリプトは出力なしの10倍長く実行されますが、やはり、質問は便宜上のもので、必要ならそうしなければならないのでしょう。
 
T-G:

なるほど、ありがとうございます。しかし、例えば注文を閉じた後のプリントを教えてください。

または条件において同じ正規化を行う。

は、EAの実行を大幅に遅くするのですか?

Print()操作は、ファイル(この場合はログファイル)に対する操作である。そして、これらの操作は(メモリからのデータ処理と比較して)非常に遅いのです。結論:init()で初期化される変数を作成する。

bool gb_VirtualTrade;
init()
{
    gb_VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode));
}

そして、この変数の条件によって印刷します(これは1つのオプションです)。

あなたが挙げた正規化の例は、述べられた目的(コードの最適化)から進めば、意味をなしません。正規化は、ブローカー・サーバーの技術的要件に従って、価格とSTOPの取引注文のみを 実行するために必要です。

 
こんにちは、Expert Advisorがポジションを開く とき、私はそれが注文を開くの信号に基づいて、そのコードに指標(条件)を記述する必要がありますか、私はExpert Advisorで指標をインストールした金融商品のウィンドウへのパスを記述する必要があります?
 

投機家の皆様、助けてくださいポジションを開く ときに、SLとTPを自動的に設定するEAを探しています。

とても感謝しています。

 
こんにちは。新しいビームが現れるポイントをマークするZIGZAGインジケータを ダウンロードできる場所を知っている人がいたら教えてください(例:異なる色で表示される)。もし、まったくないのであれば...。