EAとインジケータの売買 - ページ 4

 
cifox:
こんにちは、マスターズさん......、ある時間に買いまたは売りをオープンするEAを作るのを手伝ってくれませんか?

あなたの投稿をここに移動しました。

このスレッドを最初の投稿から読むと、いくつかのEAが見つかると思います。

 

1日に売り買い1回ずつしか開けない!?

こんにちは、皆さん。

私のEAには少し問題があります。それは、価格の動きに基づいており、一日の間に複数のポジションを開くことができます。私はこれを制限したいのですが、どうすればいいのか分かりませんでした。

私がしたいことは次のようなものです。

もし、その日にすでに買いポジションを持ったなら、他の買いポジションを持たないでください。しかし、もし売りシグナルを 見つけたら、売りシグナルをオープンする。この場合、この後、別の売りシグナルを見つけたら、他の売りポジションを建てないでください。

この書き方と正しいポジションがわかりません。助けていただけますか?

どうもありがとうございます!

よろしくお願いします。

マウロ

EDIT。

別のトピックでは、私はこのコードを見つけたが、私はどこで、どのようにそれを添付するのか分からない。

if(OrderSelect(1, SELECT_BY_POS)==true)

{

if(TimeToStr(OrderOpenTime(),TIME_DATE ) != TimeToStr(CurTime(),TIME_DATE ))

{

//open new order

}

}
 

このトピックでは、私が探しているものについては何もありません...このトピックは、同時に購入と販売についてです...しかし、私が話していることは、私がすでに買い注文を開いている場合、私のEAが日中は新しい買い注文を開いていないことです。同じことは、それがすでに売り 注文を開いている場合。

しかし、もし買い注文を出したら、日中は上に書いたルールに従って売り注文しか出せない。

時刻は今日

EAが買い注文を出した。

そのポジションはTakeProfitまたはStopLossに達したので、決済されます。

次に、EAは別の買いシグナルを見ることができますが、前の時間にすでに買い注文を出しているため、この注文を出しません。

次にEAは売りシグナルを確認し、まだ売り注文を出していないことを確認し、売りポジションを建てます。

このポジションはTakeProfitまたはStopLossに達したので、決済されます。

今、EAは別の売りシグナルを見ることができますが、すでに前の時間に売り注文を開いていることを見て、この注文を開きません。

これは私が探しているものです...。

 

この場合、この2つのスレッドが必要です。

https://www.mql5.com/en/forum/176322

https://www.mql5.com/en/forum/173026

 

OK、NewDigitalの返信ありがとうございます。さて、私のコードはこうだと思います。

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

ticket=OrderSend(....

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

[/CODE]

So, can you check if I have added this code in the right way on my code?Here it is

[CODE]if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "MaxPower Buy Order", MagicNumber, 0, DodgerBlue);

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

上記のコードは買いポジションのみですので、この方法では買いポジションのみを開くはずです。もし私がSELLについてのコードに同じことをすれば、それは唯一の売りポジションを開くべきである、そうですか?

ご教授ありがとうございます。

マウロ

 

MMM...Metaeditorがエラーがあると言っている...。

'\end_of_program' - unbalanced left parenthesis (259, 1)
 

ということは、この

{[/CODE]

and

[CODE]}

はアンバランスです。

コードで確認してみて ください。

すみません、私はコーダーではないので、あまりお役に立てません。

 

こんにちは、newdigitalです...はい、ファレンテシスは知っています...しかし、私はすべてのコードをチェック し、ファレンテシスはバランスをとっています...

しかし、私はすべてのコードをチェックし、ファレンテシスはバランスされています...うーん...私はどこに問題があるのか理解できません...しかし、私はチェックを続けます...私は解決策を見つけることを望みます

ありがとうございました。

マウロ

 

例えばこれ。

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());
 

MT4のデバッグは面倒ですが、根気よくやれば問題は解決します。

まず最初に言えることは、MT4が問題だと言っているところは...問題ではありません!次に私がすることは、問題を引き起こしている可能性の高い複雑なIF文の中の膨大なコードの塊をカットし始めることです。

例えば...

if(){

//second if

if(){

//third if

if(){

}

}

}

2番目と3番目のIFを削除して、1番目のIFだけを残します。コンパイルできたら、原因を絞り込むことができます。次に2と3を貼り付けて、3を削除し、もう一度テストします。これを数分続ければ、最終的に問題が見つかるでしょう。

がんばってください。

LUx