どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 2

 
gyfto:


次のような疑問があります。init()の中にターミナルをハングアップさせるブロックがあります(これをdllに転送したいのです)。当然、ログを見ることはできません。Ctrl+Alt+Deleteでターミナルを閉じるだけです。トレース(とブロックに入るループの経過時間の測定)のために印刷を解除しても、プリンタは何も書き込まず、ロギングも作成されないのです。同じ目的でFileOpen/FileWriteを使おうとすると、ファイルが作成されるだけで(0Kb)、沈黙してしまいます。FileOpenの次の行にFileWriteを入れましたが、効果はありません。どっちを掘ればいいんだろう?

使ってみてください。それでもだめなら、エラーを探すために、一時的にフラグによる一回限りの起動のための初期化ブロックに言及し、そこからログを「引き出す」ことを試みることができます。
 
gyfto:


トピックは終了しました...悪い人。

次のような疑問があります。init()の中にターミナルをハングアップさせるブロックがあります(これをdllに転送したいのです)。当然、ログを見ることはできません。Ctrl+Alt+Deleteでターミナルを閉じるだけです。トレース(および受信ループのトランジットタイム測定)のために印刷を解除しても、プリンタは何も書き込まず、ロギングも作成されません。同じ目的でFileOpen/FileWriteを使おうとすると、ファイルが作成されるだけで(0Kb)、沈黙してしまいます。FileOpenの次の行にFileWriteを入れましたが、効果がありません。掘る方向は?


ほら、属性に隠し事がないでしょ?


隠していないのです。
 
TarasBY:
これを使ってみて ください。それでもダメなら、エラーを探すために、フラグを経由して一時的に一発起動のために言及した初期化ブロックを取り込んで、そこからログを「引っ張って」みるのも手です。


startやininitでの1回限りの起動も、PrintもFileWriteも効きません。このコードの一部を添付します(他の方法が見当たりません)、長すぎるのでここには載せません。バッファの宣言をすべて削除し、そこに内蔵テクニカル指標の呼び出しをすべて記述しています。配列によるメモリのオーバーフローはすでに考えていて、一番大きな配列と他の配列を全部足すと50と1円という計算をしています。まあ、ブロックに入るとき、一番最初の行でも印刷されないとなると...。- というのが気になる。添付のバージョンはFileWriteでそうです。
ファイル:
eflfcaj.mq4  10 kb
 
gyfto:

起動時の一回限りの起動も、ininitも、PrintもFileWriteも効きません。このコードの一部を添付します(他の方法が見当たりません)、長すぎるのでここには貼り付けません。バッファの宣言をすべて削除し、そこに内蔵テクニカル指標の呼び出しをすべて記述しています。配列でメモリがオーバーフローすることは既に考えていて、一番大きな配列と他の配列を全部足すと50.5mになる計算です。まあ、ブロックに入るとき、一番最初の行でも印刷されないとなると...。- というのが気になる。添付のバージョンはFileWriteでそうです。

コードのスタイルでは処分されない。スペースがない、括弧のレベルが違う、操作がいくつも並んでいる、コメントがない...。悪夢だ!:-))

ご自身で理解されているのでしょうか?

 
MT4の問題解決に役立つ。カスタムインジケータを 呼び出すと、その入力パラメータとウィンドウ内の色が表示されない(早く点滅して消える)。どうすれば直るのか?MT4を再インストールしてもダメでした。
 
gyfto:


彼はその話題を閉じた・・・。良い人ではない。


= :)
 
gyfto:

ワンタイムスタートアップもイニシャルスタートアップも、PrintもFileWriteも効かない。このコードの一部を添付します(他の方法が見当たりません)、長すぎるのでここには貼り付けません。バッファの宣言をすべて削除し、そこに内蔵テクニカル指標の呼び出しをすべて記述しています。配列でメモリがオーバーフローすることは既に考えていて、一番大きな配列と他の配列を全部足すと50.5mになる計算です。まあ、ブロックに入るとき、一番最初の行でも印刷されないとなると...。- というのが気になる。添付のバージョンはFileWriteでそうです。

Vadimと同意見で、コードは読みにくいです。このコードを機能ブロックに分解し、各ブロックで印刷またはファイルへの 書き込みを行ってみてください。そして、例えばこんな風に、コードの実行を「遅くする」構造で実行します。

void SteppingThrough()
{
    int  li_Time = TimeLocal(), li_N = 0;
    bool lb_work = true, lb_break = false;
    while (IsStopped() == false)
    {
        if (lb_work)
        {
            switch (li_N)
            {
                case 0:
                    //---- Block 1
                    lb_work = false;
                    li_N++;
                    break;
                case 1:
                    //---- Block 2
                    lb_work = false;
                    li_N++;
                    break;
                case N:
                    //---- Block N
                    lb_break = true;
                    li_N++;
                    break;
            }
            if (lb_break) break;
        }
        if (TimeLocal() > li_Time) {li_Time = TimeLocal(); lb_work = true;}
    }
}

次のブロックの実行を1秒遅らせる。- 端末はログを印刷するのに十分な時間があるはずです。

 
 

金さんの「STOPによるラストポジションクローズフラグ」と「TAKEによるラストポジションクローズフラグ」には、非常によく似た機能が2つあります。

以下はそのコードです。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, 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)) {
    dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, 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)) {
    dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}

ご覧の通り、非常によく似ています。

でも、なぜかSTOPで閉じる のだけはうまくいくんです。

SL=  isCloseLastPosByStop("", -1, -1);
TP=  isCloseLastPosByTake("", -1, -1);

Print(SL,"_",TP); 

それは動作しますが、私のExpert AdvisorはUNITを印刷せず、NULLを印刷し続けます。

しかし、STOPでのクローズは正しくプリントされます:もしstop = 1なら、そうでなければstop = 0・・・。

助けてください...。

 
lottamer:

金さんの「STOPによるラストポジションクローズフラグ」と「TAKEによるラストポジションクローズフラグ」には、非常によく似た機能が2つあります。

以下はそのコードです。

ご覧の通り、非常によく似ています。

でも、なぜかSTOPで閉じるのだけはうまくいくんです。

手動でポジションをオープンし、TAKEをショートさせます。それはうまくいきますが、EAはUNITを表示せず、NULLを表示し続けます。

しかし、STOPでのクローズは正しくプリントされます:もしstop = 1なら、そうでなければstop = 0・・・。

このことを理解するのを助けてください....


逆指値注文がどのような価格でオープンポジションを 持ち、どのような価格でクローズしたかを注意深く見てください。イゴールの機能は、これらの正確な価格を比較しますが、スリッページは考慮されません。