[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 59

 
xrust писал(а)>>
詳細レポートの名前を通常レポートに変更すればOKです

この名前は具体的にどこで変更できるのか、難しいことでなければ教えていただけませんか?ユーザーヘルプには全く書かれていない。

 
えー...困惑してますね...。 ファイル名を変更したことがないのか?
 
専門家の皆様、私の質問を無視しないでください。

ボラティリティを日足などで カウントするような指標はないのでしょうか。しかし、0.34のような不定な数字を出すものはダメだ。しかし、1日あたりのローソク足の数を計算し、それを与えられた期間(日数)で割ることで、インジケータが平均値を知ることができるようにする必要があります。例:始値100、終値200、2日目-始値200、終値250。この2日間の平均ボラティリティ=((200-100)+(250-200))/2日=(100+50)/2=75
ダウンロードできる場合は、ダウンロード先。
 
xrust писал(а)>>
ええと...困ったなあ...。>> ファイル名を変更したことがないのですか?

端末は20分ごとに自動的にレポートを作成し、ftpサーバーに送信することになっています。この機能は、デフォルトで通常のレポートを保存します。端末のこの機能は、デフォルトでは通常のレポートを保存しますが、私は追加情報とグラフを含む詳細なレポートを希望します。手動で問題なく詳細レポートを保存でき、必要な履歴期間を選択することができます。

そして、まず私が困っているのは、自動 機能を整理するために、何を、どこで手動で リネームすればいいのか、ということです。全然クリアになってない。

 

https://forum.mql4.com/ru/10422 からの投稿を繰り返すと、おそらく私自身の質問はこちらの方が適切でしょう。


以下は、example.iniから 引用したコードの一部です。

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


ペアの数を読み取り、ペアの名前を1つずつ文字列の配列に保存します。

#include <IniFiles.mqh>

extern string config_path = "C:\Program Files\MetaTrader - MetaQuotes\experts\example.ini";

string CrossName[];
int numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
string sectionName = "common";

numCross = ReadIniInteger(config_path, sectionName, "numCross", 0);
ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = ReadIniString(config_path, sectionName, "name", "-");
Print("init.1: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.1: read complete");

for (i=0; i<numCross; i++)
{
Print("init.2: CrossName[", (i+1), "]=", CrossName[i]);
}


Print("-------------------------------");
for (i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = StringSubstr(ReadIniString(config_path, sectionName, "name", "-"), 0, 0);
Print("init.3: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.3: read complete");

for (i=0; i<numCross; i++)
{
Print("init.4: CrossName[", (i+1), "]=", CrossName[i]);
}

return(0);
}


簡単なようで、iniを読むと、ペア名の配列が得られるはずです。

しかし、その結果、iniから別のパラメータを読み込んで、配列の 別の要素に 値を代入した後。

は、以前に割り当てられた他のすべての要素が同じ値を取得します。

2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: -------------------------------
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[2]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[1]=USDJPY

2009.04.09 02:17:06 example GBPUSD,H4: init.1: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[1]=EURUSD

文字列配列を変数に代入するときに、実は、その代入が

値ではなく、参照。全てのドキュメントとフォーラムを探しましたが、なぜそうなるのかの答えは見つかりませんでした。

StringSubstrを 使うことで解決しましたが、何かちょっと違うような気がします。


知っている人に質問:文字列配列の要素に他の 変数の値を正しく代入する方法は

 
Yug >> :

https://forum.mql4.com/ru/10422 からの投稿を繰り返すと、おそらく私自身の質問はこちらの方が適切でしょう。


思い出した!文字列実装の特殊性。配列のサイズを変更した後、それを通過させ、ゼロにする必要があります。

ArrayResize( CrossName, numCross);

for (int i=0; i< numCross; i++)
{
   CrossName[ i] = "";
}
間違っているかもしれませんが、参考になるはずです。
 
XinoXano писал(а)>>

端末は20分ごとに自動的にレポートを作成し、ftpサーバーに送信することになっています。この機能は、デフォルトで通常のレポートを保存します。端末のこの機能は、デフォルトでは通常のレポートを保存しますが、私は追加情報とグラフを含む項目別のレポートを希望します。手動で問題なく詳細レポートを保存でき、必要な履歴期間を選択することができます。

そして、まず私が困っているのは、自動 機能を整理するために、何を、どこで手動で リネームすればいいのか、ということです。全然クリアになってない。

Report templatesstatement.htm と detailed reportStatementDetailed.htmterminaltemplates フォルダーにあります。デフォルトでは、ターミナルはプレーンなstatement.htm レポートを送信します。StatementDetailed.htmが 必要です。私はロシアで、Windows 環境のStatementDetailed.htmの ファイル名をstatement.htmに 変更することを提案しました。また、リネームに関するインストラクションも書いてください。

 

専門家の皆様へ。

LOKingトランザクションについて教えてください。

詳細とコードはこちらLOKing of Positions(ポジションの喪失)に対処するのを助けてください。

常に敬意をもって。

 
xrust писал(а)>>

Report templatesstatement.htm, detailed reportStatementDetailed.htmterminaltemplates フォルダにある。デフォルトでは、端末は通常のレポートstatement.htm を送信しますが、詳細なstatementDetailed.htm が必要です。私はロシア語で、Windows の ファイルStatementDetailed.htmstatement.htm にリネームすることを提案しました。あるいはリネームも含めて説明書を書く?

いいえ、私はできるようになりますが、別のテンプレートに1つのテンプレートを置き換えるために自分自身の名前を変更しない、それは私に発生しませんでした...

ありがとうございました。これですべてがクリアになり、すべてが機能するようになりました!!!!

 
Everlost >> :

非常に単純なことですが、Cls_SまたはCls_Bの信号が来たら、最後に開いたポジションを忘れます(Last_Position変数の値を-1に戻す)。

if ((Cls_S==true || Cls_B==true) && Last_Position>=0) Last_Position=-1;

理論上は問題ないのですが、Expert Advisorが完全に停止してしまいました(

こんな感じで持っています。

//Учет ордеров истории
int ORDtime=0;
double ORDprofit=0.01;
int ORDtype=-1;
for (int j=OrdersHistoryTotal()-1; j>=0; j--) 
{
  if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY)) 
  {
    if (OrderSymbol()==Symbol()) 
    {
      if (OrderCloseTime()!=0 && OrderCloseTime()> ORDtime) 
      {
        ORDtime=OrderCloseTime();
        ORDtype=OrderType();
        ORDprofit=OrderProfit();
      }
    }
  }
}
...
//Торговые критерии на открытие и экстренное закрытие ордеров
if (( ORDtype==-1)&&(...))
   {
    Opn_B=true;
   }
if (( ORDtype==-1)&&(...))    
   {
    Cls_B=true;
   }
if (...)
   {
    Opn_S=true;
   }
if (...)    
   {
   Cls_S=true;
   }
// Дополнительные условия к открытию
if (( Cls_B==true|| Cls_S==true)&&( ORDtype>=0)) ORDtype=-1;       //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


は何かの間違いなのでしょうか?