エラー、バグ、質問 - ページ 2964

 
Roman:

構造体を単一の変数に置き換える ))

譲渡不可。

 
fxsaber:

転送されないんです。

Expert Advisorで関数をインポート したのを覚えていますか?
構造の例を更新したのですが、そこはあまり間違っていませんでした。
一般に、構造体を扱う場合は、構造体オブジェクトをどのように宣言するか、グローバルに、あるいはローカルに考える。
また、一つの変数に対しては、これらすべては不要で、ただ変数を返せばそれでよい。

Документация по MQL5: Основы языка / Препроцессор / Импорт функций (#import)
Документация по MQL5: Основы языка / Препроцессор / Импорт функций (#import)
  • www.mql5.com
Импорт функций (#import) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

EAに関数をインポート したのを覚えていますか?

アイデアのインジケーターやEAのソースコードを提供してもらえるかどうか?

 
fxsaber:

アイデアのインジケーターやEAのソースコードを提供してもらえるかどうか?

そう、不思議なんです。mql4で関数のエクスポートが なぜかうまくいかない。
ライブラリやインジケータから結果が得られない。しかし、依存関係にある関数を見たことがあります。
ライブラリの例

#property library
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

double value = 0.0;

//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double SetValue(double v) export
{
   value = v;    
   return(value);
}

//+------------------------------------------------------------------+
double GetValue(void) export
{
   return(value);
}
//+------------------------------------------------------------------+

値を設定するインジケータ

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window

#import "Lib.ex4"
   double SetValue(double v);
   double GetValue(void);
#import

MqlTick tick;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   Comment("");
}
  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   
   SymbolInfoTick(NULL, tick);
   SetValue(tick.bid);
   
   //Comment((string)GetValue());   
   
   return(rates_total);
}
//+------------------------------------------------------------------+

関数で値を取得するはずのExpert Advisorが動作しない

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#import "Lib.ex4"
   double GetValue(void);
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   EventSetMillisecondTimer(10);
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment("");
   EventKillTimer();
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
}

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
   double bid = GetValue();
   
   Comment("\r\nЭксперт получил значение из индикатора = "+(string)bid);
   //ChartRedraw();

}
//+------------------------------------------------------------------+
 
fxsaber:

Sparam contains MqlTick, lparam - tick number.私はこの方法でインジケータからティックを送信しています。

Expert Advisorは、OnChartEventで これらのティックをキャッチします。そして、現在のティックが最も実際のものであるかどうかを理解する必要があるのでしょうか?すなわち、ティックのキューがあるのか、それとも空なのか?

そのために、インジケータが送信した最新のティックの番号(タスクはこの番号を読み取ることです)を読み取ります。ティックが同じ番号であれば、キューは空で、ティックを使って作業を開始することができます。


また、OnTickの動作中、OrderSendの後に、インジケータがさらにティックを送信したかどうかをチェックする必要があります。そのためには、再びインジケータから数値を読み取る必要があります。また、1つのOnTickの間に、このようなチェックが100以上行われることもあります。だからこそ、早く読むことが必要なのです。

Expert Advisor が CopyTicks を通してティックを取得する場合、なぜキューが空であることを知る必要があるのでしょうか。

各イベントを処理させ、すでに処理された時間より短いイベントはスキップさせる。

 
Andrey Khatimlianskii:

Expert Advisor がCopyTicks でティックを取得している場合、なぜキューが空であることを知る必要があるのでしょうか?

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

バグ、バグ、質問

fxsaber, 2021.02.17 21:26

この問題に対する私の考えを教えてください(MT4)。

インジケータはどこかにint-numberを書かないといけない。そして、EAはそれを読まなければならない。

 
fxsaber:

のようなものがあればいいのでしょうか?

https://www.mql5.com/ru/code/818

File Mapping без DLL
File Mapping без DLL
  • www.mql5.com
Класс MQL5, который работает напрямую с маппингом, без использования самописной DLL.
 
Mikhail Mishanin:

のようなものがあればいいのでしょうか?

https://www.mql5.com/ru/code/818

手軽なWinAPIオプションは上記で提案 しました。

 
fxsaber:

手軽なWinAPIのバリエーションが上で提案 されています。

このオプションはより危険であり、実行が困難です。

 
Andrei Trukhanovich:

このオプションはより危険であり、実行が困難です。

これを待って いる。