KimIVの便利な機能 - ページ 121

 

関数https://forum.mql4.com/ru/38949/page5#434241 にエラーがあります。

このようになるはずです。

double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
  double mi, oop=0, p;
  int    i, k=OrdersTotal(), pp=0;

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

}

再ダウンロードしてください。

 

皆さん、こんにちは。

エキスパートアドバイザーを修正する際(MQLのアップデートによる)、Igor Kimの多くの関数が機能しないことが判明しました。人気のあるものも含まれています。例えば、こんな感じです。

NumberOfPositions - ポジションの数を返す。

ExistPositions - ポジションが存在するかどうかのフラグを返す。

もう一つの関数は、昨日スレッドで紹介した、Function NumberOfBarCloseLastPos()です。
この関数は、最後のポジションを閉じるまでのバー数を返します。

Strategy Tester のチャート上にコメントを表示すると、取引(現在および決済済み)があるにもかかわらず、関数が常に一定の値(-1 または 0)を返していることがわかります。EAがこれらの関数で定義された条件をコードで見ていないように見えます。

さらに、いわゆる「実行可能」な関数、例えばポジションを閉じるための関数群であるClosePosBySelect(この関数は事前に選択された1つのポジションを閉じる)および関連する関数が動作しなくなる。
ClosePositions - 市場価格でポジションをクローズ する、など。

これらの関数にどのようなバグがあり、何を修正しなければならないか、少なくともそのうちの1つであるNumberOfPositionsを 使用して、ポジションの数を返すか どうか、アドバイスしてください。

 
Rita:

皆さん、こんにちは。

エキスパートアドバイザーを修正する際(MQLのアップデートによる)、Igor Kimの多くの関数が機能しないことが判明しました。人気のあるものも含まれています。例えば、こんな感じです。

NumberOfPositions - ポジションの数を返す。

ExistPositions - ポジションが存在するかどうかのフラグを返す。

もう一つの関数は、昨日のブランチで紹介した、Function NumberOfBarCloseLastPos()です。
この関数は、最後のポジションを閉じるまでの小節数を返します。

Strategy Tester のチャート上にコメントを表示すると、取引(現在および決済済み)があるにもかかわらず、関数が常に一定の値(-1 または 0)を返していることがわかります。EAがこれらの関数で定義された条件をコードで見ていないように見えます。

さらに、いわゆる「実行可能」な関数が動作しなくなります。例えば、ポジションを閉じるための関数群、ClosePosBySelect(事前に選択された1つのポジションを閉じる)および
ClosePositions - 市場価格でポジションをクローズ する、など。

少なくともそのうちの1つを例にとって、関数にどのような不具合が生じていて、何を修正する必要があるのかをアドバイスしてください -NumberOfPositions - Positionの数を返す

NumberOfPositions()は、私の場合は問題なく動作します。本当に、プラスアルファのないMQL4で仕事を続けているんです更新された言語で書いているのであれば、すべてそれに合わせるか、フリーランスになる必要があるのでしょうね今はすべてが恐ろしいほどの勢いで商品化されています心が洗われるような思いです

どうにかしてNumberOfPositions()を収めることができれば、ExistPositions()は必要 ないのですこのように確認することができます。

if(NumberOfPositions() > 0) //вместо if(ExistPositions() == true)
----------------------------//или
if(NumberOfPositions() == 0)//вместо if(ExistPositions() == false)

がんばってください。

 
borilunad:

NumberOfPositions()は、私の場合は問題なく動作します。本当に、プラスアルファのないMQL4で仕事を続けていますよ。更新された言語で書いているのであれば、すべてそれに合わせるか、Freelanceに行くべきでしょう今、あらゆるものが恐ろしいほどの勢いで商業化されています。!

あまりここに来ないのでわからないのですが、「プロなしのMQL4」ってどういう意味ですか?

ここで答えられる人は、訪問者にお金を払わせて、複雑でないフリーランスの 質問に答えさせるために、そうしていないとでも思っているのでしょうか。

このようなI.Kimの機能を、MQLをアップデートした最新版のmt4で動作するように修正するには、地元のプログラマー・商業者がどれくらいの費用をかけるのだろうか。

//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }}}}}
  return(kp);
}
Comment( NumberOfPositions(NULL, -1, Magic) ); - EAがポジションを開いたとしても、常に-1を返すことを思い出してください。
 
Rita:

あまりここに来ないのでわからないのですが、「MQL4 without pros」というのはどういう意味ですか?

ここで答えられる人は、訪問者にお金を払わせて、複雑でないフリーランスの 質問に答えさせるために、そうしていないとでも思っているのでしょうか。

このようなI.Kimの機能を、MQLをアップデートした最新版のmt4で動作するように修正するには、地元のプログラマー・商業者がどれくらいの費用をかけるのだろうか。

Comment( NumberOfPositions(NULL, -1, Magic) ); は、EAがポジションをオープンしていても、常に-1を返すことを思い出してください。

関数のパラメータとしてNULLを 指定すると、パラメータがないことを意味します。

その方が良い)Comment( NumberOfPositions(Symbol(), -1, Magic));

 
Rita:

あまりここに来ないのでわからないのですが、「MQL4 without pros」というのはどういう意味ですか?

ここで回答できる人は、訪問者にお金を払わせて、複雑でないフリーランスの 質問に回答させるためにそうしているのではないと思いますか?

このような機能を修正するコストは、商業プログラマーにとってどの程度になるのだろうか。

Comment( NumberOfPositions(NULL, -1, Magic) ); の出力は、EAがポジションをオープンしていても、常に-1が返されることを思い出してください。

MQL4++がアップデートされました!こちらではそう呼ばれています。

私の関数は正しい ポジションの数を返しますしかし、Comment()でエラーになっていますね!この機能なら大丈夫!

こんな風に試してみてください。

int start()// или что у Вас там, как в обновлённом MQL4


  int BuyPos = NumberOfPositions(Symbol(),OP_BUY, Magic); //это вызов этой функции, чтобы знать, сколько у Вас баев
  int SellPos = NumberOfPositions(Symbol(),OP_SELL,Magic);//а это для селлов



  Comment("Buy ",BuyPos," Sell ",SellPos);

この方法では、チャート上ですべてを正確に見ることができ、BuyPosとSellPos変数を適用して、条件をチェックします私が持っている方法をご覧ください。

      if(BuyPos == 0 && SellPos == 0) 
      {
// и так далее ...

がんばってください。

 

borilunadさん、vadynik さん、ありがとうございました。

確かに、機能は動いていますねここで、有益なヒントをいただいたことに、謙虚に感謝します。https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

 
borilunad:

今、あらゆるものが恐ろしいほどの勢いで商業化されています。心が洗われるような思いです

ボリス、そんなこと言って恥ずかしくないの?あなたを助けようとして書いたページが何枚あるか数えてみてください。これがお世話になった方々へのお礼ですか?全部は覚えていませんが、Artem(artmedia70)さんが親切に対応してくれて、お返しをもらいました...。
 
Rita:

以下はその代替案です。この関数は、注文 数が変更された場合にのみ呼び出されます。さらに、注文の種類が変更された場合にも呼び出すことができる。

// переменные глобального уровня
int Total[6];
int ot;

void OnTick()
{
 if(ot != OrdersTotal())
  CountTrades();

  Comment("Ордеров BUY ", Total[OP_BUY], "\n"
        , "Ордеров SELL ", Total[OP_SELL], "\n"
        , "Ордеров BUYLIMIT ", Total[OP_BUYLIMIT], "\n"
        , "Ордеров SELLLIMIT ", Total[OP_SELLLIMIT], "\n"
        , "Ордеров BUYSTOP ", Total[OP_BUYSTOP], "\n"
        , "Ордеров SELLSTOP ", Total[OP_SELLSTOP], "\n"
}
void CountTrades()
{/*********************Подсчёт открытых ордеров**********************/
  ArrayInitialize(Total, 0);
           int type, total = OrdersTotal(); ot = 0;
            for(int i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                type = OrderType();
                 Total[type] += 1;
                ot++;
               }
             }
}/*******************************************************************/
 
Rita:

borilunadさん、vadynik さん、ありがとうございました。

確かに、機能は動いていますねここで、有益なヒントをいただいたことに、謙虚に感謝します。https://www.youtube.com/watch?v=SFJeHI2LVX4&feature=related!

ありがとうございました。しかし、次に提案された関数は、MQL4+で書かれているので不具合があるかもしれませんよ。