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

 

こんにちは。

なぜ以下のアルゴリズムがうまくいかないのか、私の頭を悩ませました。関数に配列を渡さない。最初はその理由を探っていたのですが、このテスト例の中にその理由を見つけることができました。

レポート:" Cannot find 'functest' in 'TestLib.ex4' " then "unresolved importfunction call.".

Test.mq4ファイルの内容

#プロパティの厳密さ
#include <TestLibx.mqh>.

int mass [5]です。

int OnInit() { return(INIT_SUCCEEDED); }.
void OnDeinit(const int reason) { }.

void OnTick()
{
(質量)である。
int c=0;
for (c=0;c<5;c++) Print (" mass[",c,"]=",mass[c]," ");
スリープ(2000)。
}

TestLibx.mq4 ライブラリファイルの内容

#プロパティライブラリ
#プロパティの厳密さ
void functest (int &massx[])
{
int c=0;
while (c<5)
{
massx[c]=MathRand()とする。
c++;
}
を返します。
}
TestLibx.mqh ライブラリファイルの内容

#プロパティの厳密さ
#import "TestLibx.ex4"
void functest (int &massx[]);
#インポート

アーカイブにオリジナルファイルを添付する。

MQL4でライブラリ関数に配列を渡す方法について教えてください。

ありがとうございます。

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. Дифференциальный индикатор Султонова Уважаемые...
ファイル:
MQL4.zip  11 kb
 
Alexey Viktorov:
値の差は10*Pointより大きいが、その差がプラスになるかマイナスになるかを検討する必要がある。

ありがとうございます。ポイントや手数料を交換するために移行したい。それのどこが悪いんだ?

double OrderSwap_Commission(int mn=-1)
  {
   int i=0;
   double sum=0,lots=0;
   double pips=0;//своп, комисся в пунктах
   for(i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderMagicNumber()!=mn) continue;
      if(OrderType()==OP_SELL || OrderType()==OP_BUY)
        {
         lots=lots+OrderLots();
         sum=sum+OrderSwap()+OrderCommission();
        }
     }
   if(lots!=0)
     {
      pips=NormalizeDouble(MathAbs((sum)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)/lots))*_Point,_Digits);
      pips=(MathRound(pips*MathPow(10,Digits)))/MathPow(10,Digits);
     }
   return(pips);
  }
//
 
bij:

ありがとうございます。ポイントや手数料を交換するために移行したい。どうしたんですか?

int  pipsProfitOrder = (int)MathFloor( ( OrderProfit() + OrderSwap() + OrderCommission() ) / (SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()) );
 
Konstantin Nikitin:

ありがとうございます。

オプ、答えが変わったな、利益は知らなくていいんだ。スワップ、コミッションは、複数のポジションを持つことができます。

 
bij:

ありがとうございます。

オペ、何か答えを変えたのか、利益は知らなくていい。スワップ、コミッション

ロットで割っているので、掛け算が必要なだけです。

SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)*OrderLots()

原理そのものは、私が使っているものを示しました。そして、それを自分のコードに適用するのは非常に簡単です。

 
Konstantin Nikitin:

ただ、ロットによる除算があるので、掛け算が必要なんですね。

原理そのものは、私が使っているものを示しました。そして、それを自分のコードに適用するのはとても簡単です。

なるほど、ありがとうございます。
 

こんにちは。

Question: インジケータがグラフィックオブジェクト(OBJ_ARROW)を作成 しますが、一部のオブジェクトはコンパイル後またはタイムフレームを変更した後にのみ表示されます。コンパイル時のエラーやワーニングはありません。テスターでは、Print("Error calling ObjectCreate():",GetLastError());0, Print("Error calling ObjectCreate():",GetLastError());4200 となっています。

ダミーに答えてもいいなら!

 
テスターは、どのようにプログラム的に別の(より小さい)時間枠から見積もりを読み込むことができますか?
 
Juer:
テスターは、どのようにプログラム的に別の(より小さい)時間枠の見積もりを読み込むことができますか?
高い時間枠は低い時間枠のデータに基づいています。だから、必要ないのです。
 
bij:
現在時刻= 値+5分の場合、またはチャート期間がM5の場合、新しいバーの始値でポジションをクローズします。

ありがとうございます。良くなったんですよ。しかし、今度は別の問題が出てきました。テスターは100%の結果を出し続けている。でも、そういうわけにはいきません。ログによると、多くの取引が開始され、指定された時間後に正常に終了しています。しかし、ポジションのオープンとクローズの瞬間を見ることができる成績表では、すべての取引が利益を生んでいるわけではありません。このような左100%の理由は何でしょうか?

アルテムもありがとうございました