初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1228

 
Vladimir Karputov:

それならば、これはもう正しい。

と表示され、終了に失敗した場合は、ログファイルを見てください。リダイレクト、取引禁止、価格なし、ストップレベルの近さなど、理由はいくらでもあり そう です。

ありがとうございます。では、このように):


void CloseSellPositions()
  {
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of current positions
	{
          if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
            {
             if(m_position.PositionType()==POSITION_TYPE_SELL)
                m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
            }
	}


  }

括弧をつけただけ。初心者が戸惑わないようにね。

 

こんにちは。ログを別ファイルに書き出すプログラムでは、このような文字列を使うことが多いですね。

StringConcatenate(M,"Начинаем проверять время работы модулей. i=",i); Log.write(M,__FILE__,__LINE__);

この行を短くする方法を教えてください。実はここで変更されるのは、出力文字列そのものと、出力先の変数名だけなのです。

試しにdefineを使ってみると

#define  LOG(LogPerem,StrMes) StringConcatenate(M,StrMes,""); LogPerem.write(M,__FILE__,__LINE__);

が、このように呼ぶと、もう動かなくなる。

LOG(Log,"i=",i);
 
pivomoe:

こんにちは。ログを別ファイルに書き出すプログラムでは、このような文字列を使うことが多いですね。

この行を短くする方法を教えてください。実はここで変更されるのは、出力文字列そのものと、出力先の変数名だけなのです。

試しにdefineを使ってみると

が、このような呼び方はもう通用しないでしょう。

プリプロセッサーを理解しているか?

あなたの

LOG("i=",i);
で展開される。
StringConcatenate(M,i,""); "i=".write(M,__FILE__,__LINE__);;

で、それがコンパイラに供給される。

面白くもなんともない。処方箋1:独楽を読む、できれば地元のものでなく、地元のものはすでに専門用語をある程度理解していることを意味します。

これを試してみてください。役に立つかもしれません。https://metanit.com/cpp/c/3.1.php

С | Препроцессор
  • metanit.com
Препроцессор является обязательным компонентом компилятора языка Си. Препроцессор обрабатывает исходный текст программы до ее непосредственной компиляции. Результатом работы препроцессора является полный текст программы, который передается на компиляцию в исполняемый файл. Для управления препроцессором применяются директивы, каждая из которых...
 
Vladimir Simakov:

面白くもなんともない。レシピはただ一つ、ドックを吸うこと。できれば地元のものでなく、地元のものはすでに専門用語の理解を意味しているからだ。

一応、これを試してみてください。https://metanit.com/cpp/c/3.1.php

急にどうしたんですか?役に立ちましたか?defineで回線を短くすることはできますか?


質問のコードを一行変更しました

LOG("i=",i);

に。

LOG(Log,"i=",i);
 
pivomoe:

こんにちは。ログを別ファイルに書き出すプログラムでは、このような文字列を使うことが多いですね。

この行を短くする方法を教えてください。実はここで変更されるのは、出力文字列そのものと、出力先の変数名だけなのです。

試しにdefineを使ってみると

が、このように呼ぶと、もう動作しない。

こんな感じで、関数のシートを使って問題を解決しました。

template<typename T1,typename T2,typename T3,typename T4,typename T5,typename T6,typename T7,typename T8,typename T9,typename T10>
void Write(T1 var1,T2 var2,T3 var3,T4 var4,T5 var5,T6 var6,T7 var7,T8 var8,T9 var9,T10 var10,string ffile,int line)
  {
   string Str;
   StringConcatenate(Str,var1,var2,var3,var4,var5,var6,var7,var8,var9,var10);
   write(Str,ffile,line);
  }; 

さて、私のプログラムでは、次のように呼び出しています。

   Log.Write("Test1",__FILE__,__LINE__);  
 
pivomoe:

突然どうしたんだ?役に立ちましたか?defineを使って行を短くすることはできますか?


質問のコードを一行変更しました

まで

LOG("Text");を実装した例をあげましたので、フォーラムのどこかで検索してみてください。
 

テスターでは正常に動作するのですが、実際の取引モードではEAを起動するとインジケータが表示されません。ログ書き込みカスタムインジケータが正常にロードされ、 それがさびしく、テキストメッセージを送信するようだが、指標のリストでチャート上に、それはまたありません。同時に、チャートにドラッグすると、データを拾って、すべて正常に表示されます。インディケータはIndicatorsフォルダのiCustom(NULL,0, "Indicator name",Count) 関数に格納されています。また、#resource "\Indicators", iCustom(NULL,0,"::Indicators Indicator name.ex5",Count) を追加してみましたが、変わりません。その理由は何ですか?

 

は、インジケーターバッファの 現在値を削除する設定はありますか?


 
このトピックに関連しないコメントは、「MQL4 MT4 MetaTrader 4初心者からの質問」に移動しました。
 

親愛なるプロフェッショナル、アドバイザーのコードで一週間のタイムフレームのRSIの値を取得することが可能かどうか助言してください、しかし、例えば水曜日から始まる週の値を計算する(つまり水曜日から次の水曜日までの週です)。私の知る限り、iRSIではできないのでしょうか?

今のところ、自分で計算するコードを書く方法しか見えていません。もっとシンプルな解決策、既成の解決策はないのでしょうか?

理由: