基本的な質問 ... - ページ 8

 

このスレッドを見てください: https://www.mql5.com/en/forum/178677

 
newdigital:
このスレッドを見てください:https://www.mql5.com/en/forum/178677

本当にありがとう、ファイルを開く命令とダウンロードリンクのために

 

10ポイント3

プログラマーさん、お願いします。

10points3のEAで、3つ目の取引が始まると、最初の取引が終了する必要があります。

実際、我々は持っています。

if (PreviousOpenOrders>OpenOrders)

{

for(cnt=OrdersTotal();cnt>=0;cnt--)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

mode=OrderType()。

if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)

{

if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePri ce(),slippage,Blue); }.

if (mode==OP_SELL) { 注文取消(OrderTicket(),OrderLots(),OrderClosePri ce(),slippage,Red); }.

return(0);

}

こうしようかと考えていました。

1. 2番目の取引が始まったら、1番目の取引のマジックナンバーを変更する、例えば magicnumber+1

2. 3番目の取引が始まったら、最初の取引を閉じて、magicnumber+1 を代入する。

私は正しいですか?

それとも他の方法で、最初に開いた取引を後でクローズするように特定できますか?

私はプログラマーではなく、ただ勉強しているだけなので、もしあなたが私を指導したり、変更を加えることができれば、より良いことです。

この変更は、聖杯の 開始になります!!!!

 

10ポイント3

すみません、EAの方です。

ANDはこのスレッドにあります。

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

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

ファイル:
10p3v0.03_1.mq4  12 kb
 

プログラミングヘルプ - return 演算子

こんにちは。

私はmt4プログラミングの初心者ですが、void関数から メインプログラム "start() "に変数をコミットするための解決策を見つけようとすることがよくあります。

質問は、変数 "CountOpenSell", "CountOpenBuy", "ProfitSell " と "ProfitBuy" からメインプログラムの start() に値をコミットするにはどうしたらいいか、ということです。

私は私の提案(太字のリターン)を追加しましたが、私はそれが正しいかどうか、どのように "start() "メインプログラムのための正しいコードであることを知っていますか?

私の悪い英語とヘルプのすべてのために申し訳ありません。

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

よろしくお願いします。

FX2006

void CallBuySellProfit()

{ ProfitBuy=0;

ProfitSell=0;

CountOpenSell=0;

CountOpenBuy=0。

for (i=OrdersTotal()-1;i>=0;i--)

{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if (OrderType()==OP_SELL) {ProfitSell = ProfitSell + OrderProfit();CountOpenSell++;}; }.

if (OrderType()==OP_BUY)の場合 利益買い = 利益買い + 注文利益();CountOpenBuy++;} {利益買い = 利益買い + 注文利益();CountOpenBuy++;}。

else Print("Error when order select ", GetLastError());

}

return(CountOpenSell)。

return(CountOpenBuy)。

return(ProfitSell);

return(ProfitBuy);

}

 

forex2006プログラミングヘルプ - return演算子

こんにちは、forex2006です。

もし本当にMLを学びたいのであれば、codersguruのチュートリアルを試してみることをお勧めします。ご質問の件ですが、void関数は 値を返すことができません。void関数から値を取得する場合は、グローバル変数を使用する必要があります。void関数から値を取り出すには、グローバル変数を使用する必要があります。 以下に簡単な例を示します。グローバル変数を関数で使うと、後々大変なことになる可能性があるので、なるべく使わないようにしましょう。

参考になれば幸いです。

int start()

{

double ProfitBuy = CallBuySellProfit(OP_BUY,false);

double ProfitSell = CallBuySellProfit(OP_SELL,false);

int CountOpenBuy = CallBuySellProfit(OP_BUY,true)。

int CountOpenSell = CallBuySellProfit(OP_SELL,true); int CountOpenSell = CallBuySellProfit(OP_SELL,true);

Comment( "ProfitBuy:コメント( "ProfitBuy: "+DoubleToStr(ProfitBuy,2) +"\n "+")

利益確定:"+DoubleToStr(ProfitSell,2)+"ⅹn "+".

"CountOpenBuy "です。「買い建玉数: "+DoubleToStr(買い建玉数,2)+"ⅹn

"売り建て回数:"+DoubleToStr(売り建て回数,2)+"ⅹn "+".

"");

を返します。

}

ダブル CallBuySellProfit(int iOrderType, bool bCount)

{

double dProfit = 0;

int iCount = 0;

for (int i=OrdersTotal()-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(オーダータイプ()==iOrderType))

{

dProfit = dProfit + OrderProfit();

iCount++;

}

}

さもなければ

{

Print("Error when order select ", GetLastError());

}

}//end for

if(bCount)return(iCount)。

else return(dProfit);

}//end CallBuySellProfit

 

同じバーでEAを停止させる

こんにちは、EAがそのバーですでに取引が行われたかどうかをチェック し、新しいバーまでそれ以上取引を行わないようにコードを配置する方法は?

ありがとうございます。

 

matrixebizさん、ローソク足が閉じる前に同じローソク足で取引開始・終了する可能性は考えましたか? 履歴リストも確認した方がいいと思います。

私はいつもこの小さな関数を 自分のEA全てに移植しています。

bool DecideToOpenTrade()

{

int total = OrdersTotal();

if (total > 0)

{

for(int cnt=0;cnt<total;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)

{

return (false);

}

}

}

}

// in case trades has already opened and closed within the candle

int histotal = OrdersHistoryTotal();

if (histotal > 0)

{

for(cnt=0;cnt<histotal;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderSymbol()==Symbol() && OrderMagicNumber() == EA_MAGIC_NUM)

{

if (Time[0] <= OrderOpenTime()) // don't open a new position if we're still on the same candle

{

return (false);

}

}

}

}

}

return (true);

}

int start()

{

// some time check codes first.. blah blah

// ...

// ...

// ...

// check signals

if (Should_Buy())

{

if (DecideToOpenTrade())

{

//... trade opening codes here

}

}

if (Should_Sell())

{

if (DecideToOpenTrade())

{

//... trade opening codes here

}

}

}

注:この関数は、EA_MAGIC_NUMにユニークな値を設定したことを前提としています。そうすれば、他のEAが開いた取引はチェックされない。

Should_Buy()とShould_Sell()は、売買シグナルが発生したかどうかを判断するために私がすべてのEAで作成している関数です。

これがお役に立てれば幸いです。さらに説明が必要であれば、私にPMしてください。

よろしくお願いします。

 

を更新しました。

 

これなら大丈夫そうです ありがとうございました。

void DesideToOpen()

//----------------------------------------------------------------+

//----------------------------------------------------------------+

{

int total = OrdersTotal();

if (total > 0)

{

for(int cnt=0;cnt<total;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS))

{

if(OrderComment() == EA_Name + MagicNumber) DecideToOpenTrade = false;

}

}

}

// in case trades has already opened and closed within the candle

int histotal = OrdersHistoryTotal();

if (histotal > 0)

{

for(cnt=0;cnt<histotal;cnt++)

{

if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderComment() == EA_Name + MagicNumber)

{

if (Time[0] <= OrderOpenTime()) DecideToOpenTrade = false; // don't open a new position if we're still on the same candle

}

}

}

}

}