「KimIVの便利な機能」のみ。 - ページ 11

 
こういう関数しか出てこなかったので、プログラマーの理屈を理解しようと思ったんです。だから、質問しているのです。そのためにこのフォーラムがあるのです。
 
satop:

DistMarketAndPos()関数。

さあ、始まるぞさらに面白い機能が登場例えば、相場と最も近いポジションとの距離をpips単位で返します。チェックする位置をより正確に選択するために、外部パラメータで設定します。

  • sy- 楽器の名前です。このパラメータが設定されている場合、この機能は指定された計器の位置のみをチェックします。""またはNULLは現在のシンボルを意味する。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUY、OP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子(MagicNumber).初期値の-1は任意のMagicNumberを意味する。


satop:

DistMarketAndPos()関数です。

さあ、始まるぞもっと面白い機能へ行こう!例えば、マーケットと最も近いポジションの距離をポイントで返します。チェックする位置をより正確に選択するために、外部パラメータで設定します。

  • sy- 楽器の名前です。このパラメータが設定されている場合、この機能は指定された計器の位置のみをチェックします。""またはNULLは現在のシンボルを意味する。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUY、OP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子(MagicNumber).デフォルト値 -1 は任意のMagicNumberを意味する。


私はそれが前後に動作するようにしようとすると、前後に注文を開く。 私は1つのエラーを持っている、それを修正するために私を助けてください。

extern int TakeProfit = 150;

extern double Lot = 0.01;

extern inttern MAGIC = 1234;

int start()

{

if (DistMarketAndPos()>150)

{

オーダー送信(シンボル()、OP_BUY、ロット、アスク、3,0、アスク+TakeProfit*ポイント)

}

return(0)です。

}

int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1)

{

ダブルディー、ピー

int i, k=OrdersTotal(), r=1000000;


if (sy==" || sy=="0") sy=Symbol();

p=MarketInfo(sy, MODE_POINT);

if (p==0) if (StringFind(sy, "")<0) p=0.00001; 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);

}

}

}

}

}

//----------------------------------------------------------------------------------------------------------------------------------------------


if (DistMarketAndPos()>150)

{

OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point)を実行します。

}

return(0)です。


{

int DistMarketAndPos(string sy="", int op=OP_SELL, int mn=-1) //この行は1つのエラーを発生させます。

//この行が削除された場合。

//コンパイルされますが、その後

//op=OP_SELLを付けない。

//それがないと、Expert Advisor は考えます。

//計算したい順番があること

//距離はOP_BUY

if (sy==" || sy=="0") sy=Symbol();

p=MarketInfo(sy, MODE_POINT);

if (p==0) if (StringFind(sy, "")<0) p=0.00001; 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)です。

return(r)です。

}

}

//-------------------------------------------------------------------------------------------

ありがとうございました

 
qwanya:


前後して動作させ、それで前後して注文を出すようにしているのですが、1つだけどうしても解消できないバグが あるので、修正するのを手伝ってください。

ありがとうございました


ぜひ試してみてください。

そして、ここでの 質問で・・・。

extern  int     TakeProfit = 150;
extern  double  Lot        = 0.01;
extern  int     MAGIC=1234;
      
      
//=====================================================================
  int    start()
      {
     if (DistMarketAndPos(NULL,OP_BUY)>150)
            {                                     
            OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,Ask+TakeProfit*Point);
            }
          
     if (DistMarketAndPos(NULL,OP_SELL)>150)
            {                                     
         OrderSend(Symbol(),OP_SELL,Lot,Ask,3,0,Ask-TakeProfit*Point);   
            }            
       return(0);
       }
          
//========================================================================          
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 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);
}
 
コメントはソースブランチにお願いします。Door to source(KimIVからの便利な機能)
 
コメントはソースブランチにお願いします。Door to source(KimIVからの便利な機能)
 
satop:

MovingInWL()関数。

なぜ動作しない機能を掲載しなければならないのか、誰か説明してください。

'LevelWLoss' - 宣言されていない識別子
'LevelProfit' - 宣言されていない識別子
'ModifyOrder' -関数 not defined
'LevelWLoss' - 宣言されていない識別子
'LevelProfit' - 宣言されていない識別子
'ModifyOrder' - 関数 not defined
6 エラー(s)、0 警告(s)。

そして、この関数自体の中で

 
DenisovOleg:

なぜ動作しない機能を掲載しなければならないのか、誰か説明してください。

'LevelWLoss' - 宣言されていない識別子
'LevelProfit' - 宣言されていない識別子
'ModifyOrder' - 関数 not defined
'LevelWLoss' - 宣言されていない識別子
'LevelProfit' - 宣言されていない識別子
'ModifyOrder' - 関数 not defined
6 エラー(s)、0 警告(s)。

そして、これは関数自体の内部です。

この関数は動作しますが、ModifyOrder関数を呼び出すので、EAコードに追加し、変数LevelWLossとLevelProfitもEAに追加して、以下のようなものにする必要があります。

extern int LevelProfit = 1000;

extern int LevelWLoss = 50;

 
Виктор
イウリイ・トクマン

このフォーラムのスレッドには本当に感謝しています。特集を組んだlurii Tokmanに最大の感謝を捧げます。個人的には、ほぼストロストラップと同列に考えています。
ありがとうございました。

 
Iurii Tokman:

GetAmountLotFromOpenPos()関数を使用します。

この関数は、オープンポジションのロットの合計を返します。考慮すべき位置をより正確に選択するために、外部パラメータで指定します。

  • sy- 市場商品の名前。このパラメータを設定すると、指定されたシンボルの位置のみを考慮するようになります。初期値」は、あらゆる市場商品を意味する。NULLは 現在の楽器を意味します。
  • op- 貿易業務、ポジションタイプ。有効な値:OP_BUYOP_SELL、または-1。初期値-1 は任意の位置を意味する。
  • mn- 位置の識別子,MagicNumber.デフォルト値-1 は、任意の識別子を意味する。

帰らない!!!

どうやっても、ゼロか「イベント処理関数が 見つかりません」 4.mq4 1 1
"

 
Aleksey Maryaskin:

このフォーラムのスレッドには本当に感謝しています。特集を組んだlurii Tokmanに最大の感謝を捧げます。個人的には、ストロストラップと同列に並べてもいいくらいです。
ありがとうございました。

特集の作者への感謝も忘れずに。