私はmql4のコーディングに非常に慣れており、最初のEAを完成させました。私の唯一の問題は、複数のペアで取引を開始させることができないことです。ジャーナルの横のターミナルのEAセクションで、EAが1つのペアでうまくトレードを開いたり閉じたりしているにもかかわらず、orderclose関数のための無効なチケットというエラーのストリームを送信しています。どなたかご教授ください。
もし、あなたのコードやエラーのログを見せないのなら、どうやって私たちに知らせろというのですか?
私たちは心を読むことはできません! 私たちの助けが必要な場合は、あなたのコードとそれが与えるエラー(ログの結果)を表示する必要があります。また、どの通貨ペアで、どの時間枠でテストしているかも教えていただければ、あなたのコードを見る際に役立ちます。
また、MetaTrader4では Strategy Testerで 一度にテストできる通貨は1 つだけであることに注意してください。もしあなたのEAが1つのチャートから同時に複数の通貨を取引する場合、ストラテジーテスターで テストすることはできません。
Matt_Townsend: EAが1つのペアでうまく取引を開始、終了しているにもかかわらず。 | というわけで、私がお勧めするのは |
投稿を編集し、SRCボタンを使ってコードを追加してください。 読みにくいので、標準テキストとしてコピー/ペーストしないでください。他のスレッドを見れば、どのようにすればいいのかわかると思います。SRCボタンを使ってコードを投稿してください。
EDIT: 以前リクエストしたとおり - . ..また、どの通貨ペアと 時間枠でテストしているのかを教えていただけると助かります ...
EDIT2:前に要求 されたように - ... と同様に、それが与えるエラー(ログの結果)...
投稿を編集し、SRCボタンを使ってコードを追加してください。 読みにくいので、標準テキストとしてコピー/ペーストしないでください。他のスレッドを見れば、どのようにすべきかは分かると思います。SRCボタンを使ってコードを投稿してください。
//| Simple Moving Average Crossover Strategy.mq4 |
//| Matthew Townsend |
//+------------------------------------------------------------------+
#property version "1.05"
#property strict
//---
//---Inputs
extern double Lots =0.01;
extern int FastMA =5;
input int FastMAMode =MODE_EMA;
extern int SlowMA =8;
input int SlowMAMode =MODE_SMA;
//+----------------------------------------+
//|undesirables |
//+----------------------------------------+
int init()
{
//----
//----
return(0);
}
int deinit()
{
//----
//----
return(0);
}
//+---------------------------------------------+
//|System start |
//+---------------------------------------------+
int start()
{
double fastma, slowma;
int ticket, total;
//---define Ma's
fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
total = OrdersTotal();
//---Start operations
if(total < 1)
{
if(fastma > slowma)
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order opened : ", OrderOpenPrice());
}
else
Print("Error opening order : ", GetLastError());
return(0);
}
if(fastma < slowma)
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order opened : ", OrderOpenPrice());
}
else
Print("Error opening order : ", GetLastError());
return(0);
}
return(0);
}
bool ans;
if(OrderType()==OP_BUY)
{
while(fastma < slowma)
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
if(OrderType()==OP_SELL)
{
while(fastma > slowma)
{
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
if(ticket < 1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
return(0);
}
//+-----------------------------------------------------------------------------------+
スレッドが長くならないように、新しい投稿を追加するのではなく、前の投稿をEDITして いただくようお願いしました
1時間足、EURUSD、1時間足GBPUSDでテストしていました
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...
クローズ操作の結果を正しく確認できていません。
ロジックの面ではいくつか問題がありますが、現状では私のストラテジーテスターでは エラーなく動いていますので、出ているエラーのリストを提供してください
以下のコードに対して、すでに2つのコンパイラ警告が出ています。
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...
クローズ操作の結果を正しくチェックできていません。
ロジックの面ではいくつか問題がありますが、現状では私の方では何のエラーもなく動いていますので、出ているエラーのリストを提示してください
EAのエラーは、orderclosefunctionの invalid ticketとその横に数字が書いてあるだけです。実際のログをお見せしたいのですが、EAが動いている2番目のチャートでは、通常はすぐに取引を開始しようとするのですが、何もして いません。もし、ログがエラーで埋まり始めたら、どのように実際のログを見せればいいのでしょうか?
問題の行をクリック、Ctrl-クリック、Shift-クリック(ウィンドウズの標準操作)で選択し、選択範囲を右クリックして「コピー」を選択します
EDIT: コードに関して、あなたはOrderSelectを 使用していますが、常にそれが毎回動作すると仮定しています。そして、それが動作しない場合、OrderTicket() のような注文詳細関数をクローズで使用し続け、最初のOrderSelect() も失敗した場合、失敗する可能性があるのです。このように、あなたのコードには多くの論理的な問題があります。
bool ans;
//You do not select an order
{
while(fastma < slowma) //Use if not while
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1) //ticket is a local variable and has not been assigned a value
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
EAのエラーは、orderclose関数の チケットが無効で、その横に数字が書かれているだけです。もし、ログがエラーでいっぱいになったら、どのように実際のログを見せればいいのでしょうか?
複数の通貨ペアや時間枠でEAを使用する場合、もう一つ非常に重要なことがあります。
あなたのコードは「マジックナンバー」選択を使用せず、履歴の未決済注文をチェックする際に使用されているシンボル(「マジックナンバー」も)をチェックしません。従って、本質的にあなたのEAは、それ自体も他のEAも正しく動作しません。
このままでは、他のEAが動いていない状態で、このEA単体でしか使えませんし、他のチャートでこのEA単体でも使えません

- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索