[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 231

 

インジケータフォルダに正しくコピーしている7

ファイル:
 
hoz:

次のような状況があります。

誤解のあるコードの一部を示しました。すべての変数はグローバルに宣言されています。IsObjectFound() 関数で、オブジェクトの最初の価格ポイントと2番目の価格ポイントの値、名前、現在のバーでのオブジェクトの価格値を取得します。オブジェクトが見つかった場合はtrue モードで そうでない場合はfalse で関数を終了する必要があります.


スタート関数の実行を継続します。これは何でしょう?

何か問題が発生してもデバッグ出力を欲張らず、さらにエラーが発生していないか確認するようにしてください。動作スクリプトの例です。

//+------------------------------------------------------------------+
//|                                             Test ObjectFound.mq4 |
//|                                         Copyright © 2013, ir0407 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, ir0407"
#property link      ""

#include <stderror.mqh>
#include <stdlib.mqh>

string objName;
int isObj;
double objPrice1, objPrice2, objPriceCurr; 

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
   if (!IsObjectFound())
   {
      Print("В окне отсуствуют объекты, поиск продолжается...");
      return (0);
   }
  return(0);
}
//+------------------------------------------------------------------+

//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound(int ObjType = EMPTY)
{
   int Error;
   //Eсли объектов на графике нет, то и делать нам тут больше нечего
   if(ObjectsTotal(ObjType) == 0)
   {
      Print("Объекты на графике отсутствуют.");
      return(False);
   }
   for (int obj = 0; obj < ObjectsTotal(ObjType); obj++)
   {
      objName = ObjectName(obj);
      //Нужно убедиться что в переменной objName лежит имя объекта,
      //а не какая нибудь чепуха.
      Error = GetLastError();
      if(Error == ERR_NO_ERROR)
      {
        isObj = ObjectFind(objName);
        if(isObj == -1)
        {
          Print("Объект с именем \"", objName, "\" не найден.");
          Error = GetLastError();
          Print("Функция ObjectFind() вернула код ошибки #", Error);
          return(false);
        }
        objPrice1 = ObjectGet(objName, OBJPROP_PRICE1);
        objPrice2 = ObjectGet(objName, OBJPROP_PRICE2);
        objPriceCurr = ObjectGetValueByShift(objName,0);
        Print("objPrice1 = ", objPrice1);
        Print("objPrice2 = ", objPrice2);
        Print("objPriceCurr = ", objPriceCurr);
      }
      else
      {
        Print("Функция ObjectName() вернула код ошибки #", Error);
        return(false);
      }
   }
   return (True); // Объект найден!
}
 
ir0407:

何かが間違って動作していても決してデバッグ出力を欲張らず、さらにエラーがないかを確認するようにしてください。動作スクリプトの例です。



イゴール さん、貴重なコメントありがとうございます。その通りです!今までオブジェクトを扱ったことがなかったのですが、今はそのコツを掴んでいます。どちらからアプローチするかは、ずっと考えていました。
 
GaNDarM:


あなたは誤解している。端末で残高の値を変更するのは、確かにいいのですが:)

前回の取引結果(利益または損失)に応じてロットサイズを変更したいのですが。また、預金の増減(損失の発生、利益の獲得)をどのように規定するのかがわからない。

取引結果を制御する方法は2つあります(他にもあるかもしれませんが、私は好きです)。
1)預金の以前の値を記憶し、現在の値と比較する(AccountBalance())。 しかしこの方法は、ターミナルのグローバル変数に 関わる必要があり、EAまたはターミナルの再起動時に変数の値が失われない(またはファイルに書き込む)ようにする必要があります。

2) そして、過去の取引結果を履歴から確認することができます(キムさんのスレッドから機能を探してみてください)。

 
koSTRIKin:

インジケータフォルダに正しくコピーしている7

正しいフォルダは、experts/indicatorsです。念のため、書き込み後にフォルダー内の存在を確認してください。

もしあれば、エディターでどんなコードでもコンパイルした後に必ず表示されます。

 
      objName = ObjectName(obj);
      //Нужно убедиться что в переменной objName лежит имя объекта,
      //а не какая нибудь чепуха.
      Error = GetLastError();
      if(Error == ERR_NO_ERROR)
関数がオブジェクトの名前を具体的に返すのであれば、なぜ無意味なのでしょうか?
 

ガーンダーム

(функцию поищите в ветке у Кима). 

支店
 
TarasBY:

取引結果をコントロールする方法は2つあります(他にもあるかもしれませんが、私の場合はこの2つです)。
1) 以前の入金額を記憶し、現在の入金額と比較する(AccountBalance())。 しかしこの方法は、EAや端末を再起動したときに変数の値が失われないように、端末のグローバル変数に関わる必要がある(またはファイルに書き出す)。

2) そして、過去の取引結果を履歴から確認することができます(キムさんのスレッドから機能を探してみてください)。


ありがとうございます、検索してみます
 

INIT()で変数にゼロが代入されているのはなぜですか?start()関数の外で、買値と売値を変数に代入する場合のエラーや方法を教えてください。RefreshRates();を前面に出してみましたが、変化なし :(

int init()
  {
   .....
   //---
   UpL  =  Ask;     // Пик вверх изначально равен цене покупки
   DownL  =  Bid;     // Пик вниз изначально равен цене продажи
   
   return(0);
  }
//---end init--------------------------------------------------------
 

ごあいさつ

先週の安値から現在の週の初めまでのバー 数の値をプログラムで取得する方法を説明します。