[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 621

 
はい。
 
Roger:
ええ、 。
:)現在、エラー130が 表示されています。一番不思議なのは、間違ったストップ(130)を設定しても、正しいtakei(ATRで計算)が設定されることですが、私のストップは初めから設定されていません...。
何か理解する方法はないでしょうか?
 
b0r1s:

助けてください!!!履歴から最後に負けた注文を選ぶには?


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг убыточности последней позиции.                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderProfit()<0) return(True);
  }
  return(False);
}

if (isLossLastPos(NULL, -1, Magic искомого ордера)) {нашли - обрабатываем...}
 
ToLik_SRGV:

ちょっと複雑すぎるかな :))
以下は私のコードです。

メソッドにパラメータとして遅延メジャックと望ましいトロールを渡す。

あなたの関数がエラー1(面白いことに、エラー1=エラーはないが結果が不明)を出し、トロールしないのは理解できない。時々、保留中のエラーをキャッチすることがありますが、ほとんどの場合、>>ERROR1がログに残っていて、咳をしない...。

私はこうしています。

//==============================================================================================
   // Модификация ордеров
//============================================================================================== 
   int criterion = TakeProfitATR (1);                // Рассчитываем "достаточную" волатильность
   if (criterion>=15) trailingOrder(511, 20);        // и если она в "норме" - тралим ордера...
//==============================================================================================

// Функция для рассчёта Take Profit по ATR

//+------------------------------------------------------------------+
//|                  Take from ATR                                   |
//+------------------------------------------------------------------+
double TakeProfitATR (int tf)
  {
   double   atr   =iATR(NULL,tf,14,0);
   double   mltp  =15000;
   if (tf==1) mltp=15000;
   if (tf==5) mltp=45000;
   double   tp    =MathRound(atr*mltp);
   return  (tp);
  }
 
artmedia70:

あなたの関数がエラー1(面白いことに、エラー1=エラーはないが結果が不明)を出し、トロールしないのは理解できない。時々、保留中のエラーをキャッチすることもありますが、ほとんどはログに >>ERROR1 と表示され、咳をしません......。

私はこのように呼んでいます。


このため、エラー1が表示されることがあります(OrderModify() docより)。

関数パラメータに未変化の値が渡された場合、エラー1(ERR_NO_RESULT)が発生する。

だから大丈夫、本当にエラーはないんだ、無視していいんだよ。
 
artmedia70:

あなたの関数がエラー1(面白いことに、エラー1=エラーはないが結果が不明)を出し、トロールしないのは理解できない。時々、保留中のエラーをキャッチすることがありますが、ほとんどの場合、>>ERROR1がログに残っていて、咳をしない...。

私はこうしています。


Limit`order(前回のコードでは忘れていました :)) + error #1 処理 (修正前に新しい価格と現在の価格を比較し、同じであれば何もしない) を追加しました。)

//+------------------------------------------------------------------+
void trailingOrder(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUYSTOP){
            if(OrderOpenPrice() - Ask > Point*trailing){
               if((Ask+Point*trailing) - Ask >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Ask+Point*trailing) - Ask > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLSTOP){
            if(Bid - OrderOpenPrice() > Point*trailing){
               if(Bid - (Bid-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Bid - (Bid-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_SELLLIMIT){
            if(OrderOpenPrice() - Bid > Point*trailing){
               if((Bid+Point*trailing) - Bid >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 (Bid+Point*trailing) - Bid > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Bid+Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Bid+Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
         if(OrderType() == OP_BUYLIMIT){
            if(Ask - OrderOpenPrice() > Point*trailing){
               if(Ask - (Ask-Point*trailing) >= MarketInfo(Symbol(), MODE_STOPLEVEL)*Point &&
                 Ask - (Ask-Point*trailing) > MarketInfo(Symbol(), MODE_FREEZELEVEL)*Point &&
                 (Ask-Point*trailing) != OrderOpenPrice()){
                  if(!OrderModify(OrderTicket(),Ask-Point*trailing,OrderStopLoss(),OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
               }else{
                  Print(">>> Слишком близко к рынку или передано неизмененное значение!");
               }
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+
 

ところで、ペンダントのStopLevelとFreezeLevelの距離について、Tutorialで間違いを発見しました。

StopLevelの最小距離の制限。

これらの要件のいずれかに違反した場合、取引操作は 実行されません。

注文の種類 注文の開始価格(OpenPrice) ストップロス(SL) テイクプロフィット(TP)
購入
改造不可ビッド-SL ストップレベルTP-Bid ≥ StopLevel
販売する
改造不可SL-Ask StopLevelAsk-TP StopLevel
バイリミット
Ask-OpenPrice StopLevelOpenPrice-SL StopLevelTP-OpenPrice(オープンプライス)≥ StopLevel(ストップレベル
販売限度額
ビッドオープンプライス≧ストップレベルSL-OpenPrice≧StopLevelと なる。OpenPrice-TP StopLevel
バイストップ
OpenPrice-Ask≧StopLevelとする。OpenPrice-SL StopLevelTP-OpenPrice(オープンプライス)≥ StopLevel(ストップレベル
セルストップ
ビッドオープンプライス ストップレベルSL-OpenPrice StopLevelの場合。OpenPrice-TP StopLevel

SellLimitは現在の価格より上に設定されているので、これは正しいです。

OpenPrice - Bid ≧ StopLevel。

 
50pips離れた2つの反対側の軌道を開くにはどうすればよいですか?
 

は、画面下のタブで楽器をソートする方法はないのでしょうか? 4つのタイムフレームで8つの楽器がごちゃごちゃに散らばっているので...。

 
Rossi:

は、画面下のタブで楽器をソートする方法はないのでしょうか? 4つのタイムフレームで8つの楽器がごちゃごちゃに散らばっているので...。


グラフの名前のついたタブをつかんで、正しい場所にドラッグします。