MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1119

 
Roman:

H1以下の分足は正しい値を返すからです。
ヘルプにあるように、これらは時間枠の値を 返すもので、いきなり定数を返すものではありません。

何がナンセンスなんだ?

ENUM_TIMEFRAMESの内部表現をお見せしましたので、目を拭いてください。

ビット 16 がセットされた場合、週次および月次のタイムフレームが決定される。

ビット15は時間単位の時間TFを定義し,TF D1 = 1000000011000 --> 11000 --> 24,すなわち開発者はD1を24時間と比較し,残りの時間単位の時間TFは10進数変換に対応する。

分単位のタイムフレームは時間単位と同じですが、上位ビットがリセットされます。


ENUM_TIMEFRAMES を返す関数は、TF の時間を分単位で返すと考えているようですが、これは正しく ありません。

は、https://www.mql5.com/ru/docs/basis/types/integer/enumeration のヘルプにある例を参照してください。

enum は、enum のメンバに任意の定数値を代入することも可能です。

ニーズに合わせて独自の列挙を作成することができます

 

ありがとうございました。助かったのはwchar_t でした!読んでみると、charと違って1文字につき2バイトを格納するんですね。


extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)

{

        str = L" - 889 - dsa - просто!";

        return L"--- Привет! ---";

}


でも、"str "関数のパラメータは、まだ割り当てられた値を返してくれない...。なぜだろう...。

 

こんにちは、問題を解決する方法を教えてください。チャート上に多くのレベル(ライン)を構築するインジケータ(アイアンとの関連付け)をベースにEAを書きたいのですが、ラインの数は500に達することができます。

私が実装したいのは、価格がチャート上の線を横切ったときに、注文やその他のイベント(アラートやメッセージなど)を開くことだけです。しかし問題は、このインジケータは何の値も返さず、水平線(名前を持つオブジェクト)を描くだけで、チャート上には何も表示されないことです。

iCustom関数で、変数"_price "を介して価格水準を取得することで解決しようとしましたが、EAがラインにタッチしたときにトレードを開始しないのです。何が悪かったのかわからない。

void OnTick()
  {
  
ENUM_OBJECT typeObj = OBJ_HLINE;
string   ArrLines[];
  
  double 
  Price;
  Price=Bid;
  
//ВАРИАНТ 1 (не получился). Я хотел, чтобы ордер открывался при пересечении любой из линий на графике   
  
//вызовем индикатор: (пара, таймфрейм, индикатор...)
iCustom(Symbol(), 0, "ITS-Level Gun", 0, 0); 

int i, k = ObjectsTotal();

ArrayResize(ArrLines, 0);

//в цикле перебираем все объекты на графике
for (i=k-1; i>=0; i--) {
  
  //узнаем имя объекта на графике
  string _name = ObjectName(i);

{

    //узнаем координату цены линии
    double _price = NormalizeDouble(ObjectGetDouble(0, _name, OBJPROP_PRICE), Digits);
  } 
}

if(Price==_price)
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);}

    // И ВСЁ, дальше не знаю, что делать


     
    } 
 
  }

OPTION 2. 設定で指定したラインに注文を出し、EAパラメータで指定したレベルで動作し、取引を開始する。


extern string h="@Line_week_open-0"; //ИЗМЕНЕНИЕ ННАЗВАНИЯ ЛИНИИ В СВОЙСТВАХ СОВЕТНИКА.ВАРИАНТ 2.

if(ObjectFind(h)>-1)

    {

     double prise = ObjectGet(h, OBJPROP_PRICE1);

     if (Price==prise)

      {OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);}       

    } 
ファイル:
we3s6_kgeqx.jpg  151 kb
 
Fib0 RU:

こんにちは、問題を解決する方法を教えてください。チャート上に多くのレベル(ライン)を構築するインジケータ(アイアンとの関連付け)のEAを書きたいのですが、ラインの数は最大500本まで可能です。

私が実装したいのは、価格がチャート上の線を横切ったときに、注文やその他のイベント(アラートやメッセージなど)を開くことだけです。しかし問題は、このインジケータは何の値も返さず、水平線(名前を持つオブジェクト)を描くだけで、チャート上には何も表示されないことです。

iCustom関数で、変数"_price "を介して価格水準を取得することで解決しようとしましたが、EAがラインにタッチしたときにトレードを開始しないのです。何が悪かったのかわからない。

OPTION 2, 設定で指定したラインで注文を出す; EAのパラメータで指定したそのレベルで動作し、取引を開始する。



for(int i = ObjectsTotal() - 1; i >=0; i--) {

        // все что не горизонтальные линии - игнорируем

        if(ObjectType(ObjectName(i)) != OBJ_HLINE) continue; 

        double PriceLine = NormalizeDouble(ObjectGet(ObjectName(i), OBJPROP_PRICE1), Digits());
	
	// измените условие Bid == PriceLine
        
	 if(Bid == PriceLine) {

                // ..... тут что-то происходит ... 

        }
}


しかし、何らかの理由でBidがラインを飛び越え、ラインの価格と同等 でなかった場合はどうするか?少なくとも前のティックを格納する変数を提供し、それが新しいティックがあなたのラインを横切った場合 - その後、いくつかのアクションを行う...しかし、このケースでは、市場が大きなギャップ、または単に価格の大きなジャンプで開かれる場合、あなたは一度に多くの行で開かれ、おそらくそこにあなたが望むところではないので、"許容 "クロスを 提供することを忘れないでください。交差点が許容範囲を超えている場合、メッセージのみが表示されます...

 
Vadim Lin:



しかし、もし何らかの理由でビッドがラインを超え、ライン価格と等しくなかったと したら......?少なくとも、前のティックが格納される変数を用意し、新しいティックがラインを横切った場合、何らかのアクションを起こす...。しかし、この場合、「許容範囲」のクロスを 提供することを忘れないでください。なぜなら、マーケットが大きなGapで開いたり、価格が大きくジャンプした場合、一度に多くのラインで開くことになり、おそらくあなたが望む場所ではないでしょう。交差点が許容範囲を超えている場合、メッセージのみが表示されます...

問題コード

 
Igor Makanu:

何がナンセンスなんだ?

ENUM_TIMEFRAMESの内部表現をお見せしましたので、目を拭いてください。

ビット 16 がセットされた場合、週次および月次のタイムフレームが決定される。

ビット15をセットして時間単位の時間TFを決定し、TF D1 = 1000000011000 --> 11000 --> 24、すなわち開発者はD1を24時間と比較し、残りの時間単位の時間TFは10進数変換に対応するようにしました

分単位のタイムフレームは時間単位と同じですが、上位ビットがリセットされます。


ENUM_TIMEFRAMES を返す関数は、TF の時間を分単位で返すと考えているようですが、これは正しく ありません。

は、https://www.mql5.com/ru/docs/basis/types/integer/enumeration のヘルプにある例を参照してください。

enum は、enum のメンバに任意の定数値を代入することも可能です。

ニーズに合わせて、独自の列挙を作成することができます

イゴール 定数値については、ずっと以前から明確になっています。
それこそ、15ビット、16ビットを戻り値として使う意味はあるのか、という話です。 こんなことはナンセンスだ。
M30以前のENUM定数は、なぜかTIMFRAME 値に 対応していた !
そしてさらに、それはすでにいくつかのビットの値に対応して
います。 男の論理は一体どこにあるんだ。
これは粗悪なミスだ。 もし意図的にそうしたのであれば、陽動作戦だ)。
変数_PeriodはすでにENUM列挙から これらの時間枠の値を すべて含んでおり、それらは追加の変換を必要としない。
したがって、これらの定数値は、ヘルプに記載されているように、 時間枠の値に 対応する必要があります。BITSじゃない!?

 
Roman:

間違いなく検疫の時期です。これまで語られてきたことをすべて検索して、自由に読んでみてください。どうして周りの人は、あなたが書いたことを全部繰り返さなければならないと思うのですか?

 
Alexey Viktorov:

間違いなく検疫の時期です。それについて言われたことをすべて検索して、自由に読んでください。なぜ、自分が書いたものを周囲がすべて繰り返すべきだと考えるのですか?

そして、なぜ間違った解決策を我慢してしまうのでしょうか?開発者が作ったものでなく、定数の値を論理的に説明したものを納品しました。

 
Roman:

そして、なぜ間違った解決策を我慢してしまうのでしょうか?開発者が作ったものでなく、定数の値を論理的に説明したものを納品しました。

どうやらあなたには、自分の意見と間違った意見の2つしかないようですね。自分に合った解説が見つかるかもしれません。
 
Alexey Viktorov:
どうやらあなたには、自分の意見と間違った意見の2つしかないようですね。自分に合った解説が見つかるかもしれません。

H1より上位 の期間については、_Period変数が 返す値を 数学的な計算で使ってみて ください。
そして、誰が間違っているのか、すぐに理解できるはずです。