私のEAはそれ自体で動いているときはうまくいくのですが、同じプロファイルで同時に別のシンボルで同じEAを動かそうとすると、2つ目のEAはうまく動かないか、まったく動かないか、エラーがたくさん出ます。これは、Symbol() を使用して、2つの別々のチャートに異なるマジックナンバーを使用した場合でも発生します。同じコードの異なるバージョンを実行しても起こります(すなわち、EAファイル名とマジックナンバーは異なるが、それ以外のコードは同一である)。グローバル変数と何らかの衝突があるのでしょうか、それとも2つ目のチャートがハングする何か他の理由があるのでしょうか?ありがとうございます。
Sneck55:
私のEAはそれ自体で動いているときはうまくいくのですが、同じプロファイルで同時に別のシンボルで同じEAを動かそうとすると、2つ目のEAはうまく動かないか、まったく動かないか、エラーがたくさん出ます。これは、Symbol()を使用して、2つの別々のチャートに異なるマジックナンバーを使用した場合でも発生します。同じコードの異なるバージョンを実行しても起こります(すなわち、EAファイル名とマジックナンバーは異なるが、それ以外のコードは同一である)。グローバル変数と何らかの衝突があるのでしょうか、それとも2つ目のチャートがハングする何か他の理由があるのでしょうか?ありがとうございます。
私のEAはそれ自体で動いているときはうまくいくのですが、同じプロファイルで同時に別のシンボルで同じEAを動かそうとすると、2つ目のEAはうまく動かないか、まったく動かないか、エラーがたくさん出ます。これは、Symbol()を使用して、2つの別々のチャートに異なるマジックナンバーを使用した場合でも発生します。同じコードの異なるバージョンを実行しても起こります(すなわち、EAファイル名とマジックナンバーは異なるが、それ以外のコードは同一である)。グローバル変数と何らかの衝突があるのでしょうか、それとも2つ目のチャートがハングする何か他の理由があるのでしょうか?ありがとうございます。
同じEAを異なるチャートで実行することは問題ではないはずですので(私は何の問題もなく実行しています)、コードを提供する必要があります... ?
SRCボタンを使って ください。
gooly:SRCボタンを使って ください!
SRCのどこが不明だったんだ?なぜ、そうしなかったのですか?編集してください!
動画を再生する投稿を編集して ください。
大量のコードの場合、添付して ください。if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { : Counter--; }
停電、OSクラッシュ、ターミナルやチャートが誤って閉じられた場合、次回のBuyTicketは失われます。 未決済の注文はありますが、決済しようと することはありません。OrderSelect ループを使えば、チケット番号を覚える必要はありません。- クローズ/デリートするときは、必ずカウントダウンしてください。他のEAが注文をクローズ した場合、1つ戻ることはうまくいきません。ループと注文のクローズまたは削除 - MQL4 forum
- ブール演算を簡略化する
// if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; // else MABuyFanning = false; MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
if(NewBar == true)
if( (2+2) == 4) == true) なんて書かないですよね?if(2+2 == 4) で十分です。だから、if(bool == true) なんて書かないで、if(bool) かif(!bool) を使えばいいんです。
SRCボタンで投稿
Sneck55:
SRCボタンで投稿
SRCボタンで投稿
しかし、最初の行の "Sorry for the delay... "はコードではないので、すべてを台無しにしてしまいました。
#property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern bool CheckOncePerBar = true; extern double FixedLotSize = 1; extern double SystemStopLoss = 150; extern double TakeProfit = 0; extern int Slippage = 5; extern int MagicNumber = 3574; //Global Variables int BuyTicket; int SellTicket; double InternalStopLoss; double CalcDigits; double CalcPoint; bool MABuyFanning; bool MASellFanning; int SelectedOrder; bool Closed; int ErrorCode; string ErrLog; double BuyStopLoss; double SellStopLoss; bool NewBar; double ThisBarOpen; double SmallMA; double MediumMA; double LargeMA; int Counter; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CalcDigits = MarketInfo(Symbol(),MODE_DIGITS);//MODE_DIGITS is count of digits after decimal point if(CalcDigits == 0) CalcPoint = 1;//Dow if(CalcDigits == 1) CalcPoint = 0.1; if(CalcDigits == 2) CalcPoint = 0.01;//Gold & Nymex if(CalcDigits == 3) CalcPoint = 0.01;//Yen if(CalcDigits == 4) CalcPoint = 0.0001;//Not used if(CalcDigits == 5) CalcPoint = 0.0001;//Non-Yen forex InternalStopLoss = SystemStopLoss*CalcPoint; return(INIT_SUCCEEDED); } //----------------------------------------------- void OnTick() { if(CheckOncePerBar == true) { if(ThisBarOpen != Open[0]) { ThisBarOpen = Open[0]; NewBar = true; } else NewBar = false; } else NewBar = true; if(NewBar == true) { //Reset Moving Averages SmallMA = iMA(NULL,0,8,0,1,0,0); MediumMA = iMA(NULL,0,10,0,1,0,0); LargeMA = iMA(NULL,0,50,0,1,0,0); if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; else MABuyFanning = false; if(SmallMA<MediumMA&&MediumMA<LargeMA) MASellFanning = true; else MASellFanning = false; if(BuyTicket == 0 && MABuyFanning == true) { RefreshRates(); BuyStopLoss = Bid - InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); BuyTicket = OrderSend(Symbol(),OP_BUY,FixedLotSize,Ask,Slippage,BuyStopLoss,0,"Buy Order",MagicNumber,0,Green); if(BuyTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in buy routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",BuyStopLoss); Print(ErrLog); //Buy ticket revert to 0 so it can try again in case of slow connection/timeout etc. BuyTicket = 0; } } if(SellTicket == 0 && MASellFanning == true) { RefreshRates(); SellStopLoss = Ask + InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); SellTicket = OrderSend(Symbol(),OP_SELL,FixedLotSize,Bid,Slippage,SellStopLoss,0,"Sell Order",MagicNumber,0,Red); if(SellTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in sell routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",SellStopLoss); Print(ErrLog); SellTicket = 0; } } //Exits if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red); if(Closed == true) BuyTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine"); } Counter--; } } } if(SellTicket != 0) { if(SmallMA>MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_SELL) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Red); if(Closed == true) SellTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",SellTicket," unable to close sell order(s): sell ma convergence close routine"); } Counter--; } } } } return; }
コードは非常にシンプルなのですが、実行するウィンドウが増えれば増えるほど、パフォーマンスが低下します。私は4つの異なるシンボルでそれを実行していますが、数分後に1つのシンボルでさえ失敗し始めます。 また、最初はうまくいきますが、私が長く実行するほど(数時間後など)、それはますます遅くなり、正確ではなくなります。 時には、カーソルのそばにある小さな円がずっと回っているだけで、それぞれのウィンドウからEAを削除するのに最大1分かかることもあります。私は、デフラグとウィルススキャンをした高速のPCを持っています - 私は私のラップトップでもそれを試してみましたが、まったく同じ結果でした。M1の履歴をすべてダウンロードしてみましたが、何の変化もありません。MT4は同じリソースを何度も使おうとしているのでしょうか?明らかに、この問題が解決されるまで、私のライブ口座での取引を信頼することはできないでしょう。
これは面白い...。
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索