[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 368

 

こんにちは。

課題があるのですが、一見簡単そうに見えますが、うまくいかないんです。値が常に 一列に並んでいる配列があります(ある場合は昇順、ある場合は降順になります)。若干のレベル(写真では赤色)があります。赤い線のレベルに最も近い2つの 配列値を見つける必要があります。図a)ではインデックス0と1の配列値、図b)ではインデックス2と1の配列値、図c)とf)ではインデックス0と0の配列値、図d)とe)ではインデックス2と2の配列値となる。

この問題を解決する方法を教えてください。よろしくお願いします。

 
Roman.:

そして、このインジケータから転送された取引条件を使って、Expert Advisorを通じてポジションをオープンするボードで、それはそれです。
ありがとうございます、何とかしています :)
 
skyjet:
ありがとうございます、整理しています :)

どういたしまして...。誰もが経験することだ。:-)
 
drknn:

今日は土曜日、お休みです。EAを起動し、初期化は行われますが、デイ・オフでティックがないため、スタート関数は起動しません(つまり、Trade()は呼ばれません)。正しく動作するかどうかを確認するためには、この関数の呼び出しを初期化ブロックに張り付けるか、テスターでテストする必要があります。

Init()にこの関数を代入し、チェックコードPrint(DayOfWeek())を追加したところ、サーバーから時刻を取得していることが判明し、サーバーの時刻は金曜日になりました...。

交換済み

if(DayOfWeek()==0 || DayOfWeek()==6)

まで

  if(TimeDayOfWeek(TimeLocal())==0 || TimeDayOfWeek(TimeLocal())==6)

で、意図したとおりに動作しました。

ありがとうございます。

 

同志の皆さん、こんにちは。

予期せぬ問題に直面した。

一昨日、テスターが正常に動作していた。昨日の夕方から、テスターにあるどのバージョンのストラテジーでも、1回取引を開くと、1秒後、または数分/数時間の履歴が残って、テスターが動かなくなります。エラーも何もない。

どなたかお困りの方はいらっしゃいませんか?アドバイスをお願いします

 

こんにちは。

エラーを見つけるのに協力してください。

以下は、EAから抜粋した問題のある部分の全文である。

extern int      MAGIC= 1; 

int start()
  {
//----
  int tt = 0;
  double SchBuyLots     = SchBuyLots_b(MAGIC);
  double SchSellLots    = SchSellLots_b(MAGIC);
  double SchBuyLots100  = SchBuyLots100_b();
  double SchSellLots100 = SchSellLots100_b();
  double SchBuyLimitLots    = SchBuyLimitLots_b(MAGIC);
  double SchSellLimitLots   = SchSellLimitLots_b(MAGIC);
  double SchBuyStopLots100  = SchBuyStopLots100_b();
  double SchSellStopLots100 = SchSellStopLots100_b();

  double dy=0;
  double dx=SchBuyLots+SchBuyLots100-SchSellLots-SchSellLots100;
  if (dx!=0) dy=MathAbs(dx);

  double zx=SchBuyLimitLots-SchSellLimitLots;

  if (dx>0 && dy+zx!=SchSellStopLots100)tt=1; else tt=2;
 
  Alert (dy+zx,"---",SchSellStopLots100,"---",tt);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
// ----------------- SchBuyLots() ---------------------------------------------
//  Функция возвращает суммарный лот Бай-ордеров для Магика
//----------------------------------------------------------------
double SchBuyLots_b(int MAGIC) {
  double SchBuyLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC){ 
      if(OrderType()==OP_BUY) {
        SchBuyLots=SchBuyLots+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLots);
}
// ----------------------------------------------------------------------------

// ----------------- SchSellLots() ---------------------------------------------
//  Функция возвращает суммарный лот Сейл-ордеров для Магика
//-----------------------------------------------------------------
double SchSellLots_b(int MAGIC) {
  double SchSellLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC) {
      if(OrderType()==OP_SELL) {
        SchSellLots=SchSellLots+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLots);
}
// -------------------------------------------------------------------------------

// ----------------- SchBuyLots100() ---------------------------------------------
//  Функция возвращает суммарный лот Бай-ордеров для Магика 100
//--------------------------------------------------------------------------------
double SchBuyLots100_b() {
  double SchBuyLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_BUY) {
        SchBuyLots100=SchBuyLots100+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLots100);
}
// --------------------------------------------------------------------------------

// ----------------- SchSellLots100() ---------------------------------------------
//  Функция возвращает суммарный лот Сейл-ордеров для Магика 100
//---------------------------------------------------------------------------------
double SchSellLots100_b() {
  double SchSellLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_SELL) {
        SchSellLots100=SchSellLots100+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLots100);
}
// ----------------------------------------------------------------------------
// ----------------- SchBuyLimitLots() ------------------------------------------
//  Функция возвращает суммарный лот BuyLimit-ордеров для Магика
//------------------------------------------------------------------------------
double SchBuyLimitLots_b(int MAGIC) {
  double SchBuyLimitLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC){ 
      if(OrderType()==OP_BUYLIMIT) {
        SchBuyLimitLots=SchBuyLimitLots+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyLimitLots);
}
// ----------------------------------------------------------------------------

// ----------------- SchSellLimitLots() ----------------------------------------
//  Функция возвращает суммарный лот SellLimit-ордеров для Магика
//-----------------------------------------------------------------------------
double SchSellLimitLots_b(int MAGIC) {
  double SchSellLimitLots=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()== MAGIC) {
      if(OrderType()==OP_SELLLIMIT) {
        SchSellLimitLots=SchSellLimitLots+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellLimitLots);
}
// -------------------------------------------------------------------------------
// ----------------- SchBuyStopLots100() -----------------------------------------
//  Функция возвращает суммарный лот BuyStop-ордеров для Магика 100
//--------------------------------------------------------------------------------
double SchBuyStopLots100_b() {
  double SchBuyStopLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_BUYSTOP) {
        SchBuyStopLots100=SchBuyStopLots100+OrderLots();
       }
      }
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchBuyStopLots100);
}
// --------------------------------------------------------------------------------

// ----------------- SchSellStopLots100() -----------------------------------------
//  Функция возвращает суммарный лот SellStop-ордеров для Магика 100
//---------------------------------------------------------------------------------
double SchSellStopLots100_b() {
  double SchSellStopLots100=0;
  int i;
  string SMB=Symbol();
  for (i=OrdersTotal()-1;i>=0;i--) {//Начало цикла
    if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {}
    else{//начало работы с выбранным ордером
      if(OrderSymbol()== SMB && OrderMagicNumber()==100) {
      if(OrderType()==OP_SELLSTOP) {
        SchSellStopLots100=SchSellStopLots100+OrderLots();
       }  
      }  
    }//конец работы с выбранным ордером
  }//Конец цикла
  return(SchSellStopLots100);
}
// --------------------------------------------------------------------------------

セリフ(ほぼ冒頭)にご注目ください。

 if (dx>0 && dy+zx!=SchSellStopLots100)tt=1; else tt=2;

なぜか、この式では dy+zxとSchSellStopLots100の値が別々に 等しい場合(allertsで確認)、互いに等しくなく なり、変数ttは値2ではなく1を取ります。

その欠点を見つけるために、あなたに協力をお願いします。

よろしくお願いします。

 
週末にサーバーからの取引条件が変更になりました...。ブローカー/ネットワークに接続されていない別の端末で、専用のユーティリティを使用して正しいスプレッドを設定してテストする必要があります。EAのテストと その適切な方法に関する記事を検索するのがよいでしょう。
 
nemo811:

(アラーツで確認)

NDやmoduloの差分があるデルタより小さいかどうかを確認するのがよいでしょう。
 
splxgf:
NDや差分モジュールが、あるデルタ値以下であることを確認するのがよいでしょう。

この数字と比較すると、dyとzxを足すとなぜか0.3という数字が出る(現在の市場の状況での私の特定のテストでは)のですが、それと等しくはなりません。つまり、dy+zxを足して0.3が得られるのです。dy+zxと0.3を比較すると、両者は等しくない。

dyとzxを返す数値で比較すると、イコールが本来の働きをする。

謎解き。

よろしくお願いします。

 
ramirez17:

同志の皆さん、こんにちは。

予期せぬ問題に直面した。

一昨日、テスターが正常に動作していた。昨日の夕方から、テスターにあるどのバージョンのストラテジーでも、1回取引を開くと、1秒後、または数分/数時間の履歴が残って、テスターが動かなくなります。エラーも何もない。

どなたかお困りの方はいらっしゃいませんか?アドバイスをお願いします

テスターにはマガジンが付いています。すべてはそこに書かれている。テスターのログを遠くから読み取る テレパスはここにはいない。