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

 
Reshetov:

OrdersTotal() は、すでにオープンしているポジションの数を表示します。

チュートリアルのTerminal()関数で、Mas_Ord_New[0][0]!=0として、ポジションを閉じるときに使っています。しかし、ここでもう一つの課題があります。それは、現在のシグナルによってすでに1つの注文が開かれている場合、そのシグナルによる取引を禁止するフラグを作成することです。国旗を使おうとしているのですが、何か間違えてしまったようです。

  
static bool buy_1=true;
   
if(Stoch_Sig==4 && buy_l==true)
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask,40,sl,0,"LSMA+Stoch",Magic);
         if(Ans==false)
           Alert("Неудачная попытка открыть ордер BUY. Ошибка: ", GetLastError());
         if(Ans==true)
            buy_l=false; // снимем флаг, запрещаем торговать по данному сигналу
       }


   
if(Stoch_Sig!=4 && buy_l==false) // поднимем флаг, сигнал сменился - торговать по нему можно опять
       buy_l=true;
 

Parny needs help What is it

2012.09.10 18:40:20 '6257743': order buy 5.00 EURUSD opening at 1.27816 sl: 1.27791 tp: 1.27876 failed [Invalid S/L or T/P] (無効なS/LまたはT/P)。

また、なぜ価格とストップロスが同じなのでしょうか。

価格 1.25618 ストップロス 1.25618 テイクプロフィット 1.25698


テイクプロフィット 60pips

ストップロス 20

 

こんにちは。カスタムインジケータについて質問です。iCustomの説明にはこうあります。

doubleiCustom() 文字列記号,int タイムフレーム,文字列名,...,int モード,int シフト)
指定されたカスタムインジケーターの計算を行う。カスタムインジケータはコンパイルして(拡張子がEX4のファイル)、terminal_directoryのexperts indicatorsに 配置する必要があります。
記号 - シンボル名:シンボルのデータから計算される指標。NULLはカレントシンボルを意味する。
タイムフレーム - 期間チャートの期間の いずれかを指定することができます。0は現在のチャートの期間を意味します。
名前 - カスタムインジケータの名前。
... - パラメータのリスト(必要な場合)。送信されるパラメータは、カスタムインジケータの外部変数(extern)の宣言順と型に対応している必要があります。
モード - 指標となる線のインデックス。0 から 7 で、SetIndexBuffer 関数のいずれかが使用するインデックスに対応する必要があります。
シフト - 指標バッファから取得した値のインデックス(現在のバーから指定した期間だけ後ろにずらす)。

質問:「shift」の値を取得する方法(shift付きでインジケータを呼び出すと、shiftなしの場合と同じ値が使用されます。iCustom(NULL, 0, "name",pam1,0,1)= iCustom(NULL, 0, "name",pam1,0,100) しかし、100バー前のインディケータを呼び出すと、 iCustom(NULL, 0, "name",pam1,0,100) とは異なる値が表示されることになります。指標はシンプルで、5つ前の終値を使って、その平均を取ります。

よろしくお願いします。

 
paladin80:
主線との偏差を0(ゼロ)に設定した。ゼロ以上でなければならない。
レシェトフ
偏差値もマイナスに設定するのでしょうか?


同志の皆さん、ありがとうございます。そのとおりです。仕事が忙しくて、さっぱりだったんです。掛け値なしに、お礼のボタンを押せばいいのにと思いました。)

ちなみに、初心者の方には、インジケータにパラメータを渡すときは、雄弁な名前の変数で渡すことをお勧めすると便利だと思います。これまではそうしてきたのですが、今回は何か失敗しました。

 

皆さん、こんばんは。

同じ質問をしたくて、ここから機能をパクりましたhttps://www.mql5.com/ru/forum/131859

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}

エラーが発生する--->

関数内の変数はすべて関数内で定義されているのですが・・・どうしたのでしょうか?

をコピーして貼り付けました。--->

   if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
   
   
 //+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 
DanLett:

そこに間違いはない。

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
  
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), CLR_NONE);
          }
        }
      }
    }
  }
}
ただし、色を指定するだけで、例えば-CLR_NONEの ようになります。
 

そして、この「宙ぶらりん」になっているように見えます。

  if((High[2]==High[1])||(Close[2]==High[1])||(High[2]==Open[1]))
   {
   DeleteOrders()
   }
実は、このような条件 (High[2]==High[1 ])や、このような条件(Close[2]==High[1])、このような条件(High[2]==Open[1])は稀なのです。グラフを見てください。このような偶然の一致はいくつ見つかるでしょうか?

順番を外すというロジックで言えば、.- も苦しくなる、要するに。

 

ここからコードをコピーして、新規プロジェクト(EA)を作成し、コードを貼り付け→コンパイル

不思議なことに、まだ同じエラーが出ます...。

 
DanLett:

ここからコードをコピーして、新規プロジェクト(EA)を作成し、コードを貼り付け→コンパイル

不思議なことに、まだ同じエラーが出ます...。

この関数以外を削除してコンパイルしてみてください。エラーは出ないのでしょうか?削除する前に保存すればいいだけです。
 

手動で取引している、eurusd 5min、時間があれば確認してみてください・・・。

このストラテジーに基づいてEAを作りたいのですが、条件_2でトレードをクローズする必要があります :),それがわかりません、クローズ関数もあるのにいつもエラーが出ます....