コーディングの方法は? - ページ 344 1...337338339340341342343344345346347 新しいコメント tkuan77 2015.12.22 13:58 #3431 mladen: tkuan77 最後に閉じたバーを見つけ、最後に閉じたバーの日が現在の日と同じかどうかを確認する必要があります。 この関数のようなものを使用して、最後のクローズドオーダーの時間を取得することができます。 datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) CloseTime = OrderCloseTime(); } return(CloseTime); } そして、日付が同じかどうかをチェックすることができます こんにちは、mladenさん。 しかし、この部分をどこに挿入すればいいのでしょうか?私はまだコーディングの初心者で、Forループがどのように機能するのか理解できないので、このような質問をするのは申し訳ないです。 よろしくお願いします。 ライアン Mladen Rakic 2015.12.22 14:27 #3432 tkuan77: mladenさん、こんにちは。 しかし、この部分をどこに挿入すればいいのでしょうか?私はまだコーディングの初心者で、Forループがどのように機能するのか理解できないので、このような質問をするのは申し訳ないです。 よろしくお願いします。 ライアン ライアン 次のような感じです。 if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()))。// 取引不可 tkuan77 2015.12.22 14:47 #3433 mladen: ライアン 次のようなものです。 if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()))。// 取引不可 こんにちは、mladenさん、コードを追加してみましたが、グローバル変数のエラーが出ているようです。また、MagicNumberという変数が定義されていないようですが、これは何のためにあるのでしょうか?intの下に追加したのですが、その変数の用途がよくわかりません。 アドバイスお願いします。ご迷惑をおかけしますが、よろしくお願いします。 //---- 入力パラメータ extern double TakeProfit = 1000.0; extern double Lots = 0.1; extern double StopLoss = 980.0; extern int Entry_Hour_1st = 21; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int start() { //+------------------------------------------------------------------+ //-- トリガートレード //+------------------------------------------------------------------+ int ticket, total, MagicNumber; double TP_Value, SL_Value; datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (オーダーセレクト(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) CloseTime = OrderCloseTime()。 return(CloseTime); total = OrdersTotal(); // 現在開いている取引数の合計を確認する if(total < 1) { if (Hour()==Entry_Hour_1st && ((高[0] - 高[1]) > 0.00100) && ((高[1] - 低[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())) { if ((クローズ[1] - オープン[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); SL_Value=(安値[1] - 0.0010)。 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。 return(0); } if ((オープン[1] - クローズ[1]) > 0.00100) { TP_Value=(オープン[1]-クローズ[1]); SL_Value=(安値[1] - 0.0010); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value,「私のEA」,200,0,Green); return(0); } if ((オープン[1] - クローズ[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); SL_Value=(安値[1] - 0.0010)。 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。 return(0); } } if (Hour()==Entry_Hour_1st && ((安値[1] - 安値[0]) > 0.00100) && ((高値[1] - 安値[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())) { if ((クローズ[1] - オープン[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); SL_Value=(High[1]+0.0010)となります。 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red); return(0); } if ((オープン[1] - クローズ[1]) > 0.00100) { TP_Value=(オープン[1]-クローズ[1])。 SL_Value=(高値[1]+0.0010); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red); return(0); } if ((オープン[1] - クローズ[1]) <= 0.00100) { TP_Value = (高値[1] - 安値[1]); SL_Value=(高値[1] + 0.0010); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value,「私のEA」,200,0,Red); return(0); } } } return(0)。 } //+------------------------------------------------------------------+ How to code? コーディングのヘルプ Coding help Mladen Rakic 2015.12.23 15:35 #3434 tkuan77: mladenさん、コードを追加したのですが、グローバル変数のエラーが出ているようです。また、MagicNumberという変数が定義されていないようですが、これは何のためにあるのでしょうか?intの下に追加したのですが、その変数の用途がよくわかりません。 アドバイスお願いします。ご迷惑をおかけしますが、よろしくお願いします。 //---- 入力パラメータ extern double TakeProfit = 1000.0; extern double Lots = 0.1; extern double StopLoss = 980.0; extern int Entry_Hour_1st = 21; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int start() { //+------------------------------------------------------------------+ //-- トリガートレード //+------------------------------------------------------------------+ int ticket, total, MagicNumber; double TP_Value, SL_Value; datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (オーダーセレクト(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) CloseTime = OrderCloseTime()。 return(CloseTime); total = OrdersTotal(); // 現在開いている取引数の合計を確認する if(total < 1) { if (Hour()==Entry_Hour_1st && ((高[0] - 高[1]) > 0.00100) && ((高[1] - 低[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())) { if ((クローズ[1] - オープン[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); SL_Value=(安値[1] - 0.0010)。 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。 return(0); } if ((オープン[1] - クローズ[1]) > 0.00100) { TP_Value=(オープン[1]-クローズ[1]); SL_Value=(安値[1] - 0.0010); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。 return(0); } if ((オープン[1] - クローズ[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); SL_Value=(安値[1] - 0.0010)。 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value,「私のEA」,200,0,Green); return(0); } } if (Hour()==Entry_Hour_1st && ((安値[1] - 安値[0]) > 0.00100) && ((高値[1] - 安値[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())) { if ((クローズ[1] - オープン[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); SL_Value=(High[1]+0.0010)となります。 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red); return(0); } if ((オープン[1] - クローズ[1]) > 0.00100) { TP_Value=(オープン[1]-クローズ[1])。 SL_Value=(高値[1]+0.0010); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red); return(0); } if ((オープン[1] - クローズ[1]) <= 0.00100) { TP_Value = (高値[1] - 安値[1]); SL_Value=(高値[1] + 0.0010); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value,「私のEA」,200,0,Red); return(0); } } } return(0)。 } //+------------------------------------------------------------------+ これは関数 です start()関数の本体の外に移動させる tkuan77 2015.12.27 10:01 #3435 ↵ mladen: これは関数です start()関数の本体外に移動させる こんにちは、mladenさん、私は関数を Start関数の外に移動してみましたが、私のEAは1日に1つの取引しかトリガーしないように制限する代わりに、1日に複数の取引をトリガーしたままです。 ご教示いただきありがとうございます。 ご指摘の通りです。 //---- 入力パラメータ extern double TakeProfit = 1000.0; extern double Lots = 0.1; extern double StopLoss = 980.0; extern int Entry_Hour_1st = 21; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int MagicNumber; datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (オーダーセレクト(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) CloseTime = OrderCloseTime()。 return(CloseTime); } int start() { //+------------------------------------------------------------------+ //-- トリガートレード //+------------------------------------------------------------------+ int ticket, total; double TP_Value、SL_Value; total = OrdersTotal(); // 現在開いているトレードの合計数をチェックする if(total < 1) { if (Hour()==Entry_Hour_1st && ((高[0] - 高[1]) > 0.00100) && ((高[1] - 低[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())) { if ((クローズ[1] - オープン[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); // ロングボディの値 SL_Value = (安値[1] - 0.0010); // 常にロングの場合、同じ値 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。 return(0); } if ((オープン[1] - クローズ[1]) > 0.00100) { TP_Value = (Open[1] - Close[1]); // ショートボディの値 SL_Value = (Low[1] - 0.0010); // 常にロングと同じ値 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。 return(0); } if ((オープン[1] - クローズ[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); // ヘッドとテールを含むローソク足全体の値 SL_Value = (安値[1] - 0.0010); // ロングでは常に同じ値 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value,「私のEA」,200,0,Green); return(0); } } if (Hour()==Entry_Hour_1st && ((安値[1] - 安値[0]) > 0.00100) && ((高値[1] - 安値[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())) { if ((クローズ[1] - オープン[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); // ロングボディの値 SL_Value = (High[1] + 0.0010); // 常にショートと同じ値 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red); return(0); } if ((オープン[1] - クローズ[1]) > 0.00100) { TP_Value = (Open[1] - Close[1]); // ショートボディの値 SL_Value = (高値[1] + 0.0010); // ショートの場合は常に同じ値 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red); return(0); } if ((オープン[1] - クローズ[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); // ヘッドとテールを含むローソク足全体の値 SL_Value = (高値[1] + 0.0010); // ショートの場合は常に同じ値 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value,「私のEA」,200,0,Red); return(0); } } } return(0)。 } //+------------------------------------------------------------------+ コーディングのヘルプ How to code? Coding help Mladen Rakic 2015.12.27 10:50 #3436 tkuan77:↵mladenさん、こんにちは。Start関数の外に関数を移動してみましたが、私のEAは1日に1つの取引しかトリガーしないように制限する代わりに、1日に複数の取引をトリガーするようになりました。 ご教示いただきありがとうございます。 ご指摘の通りです。 //---- 入力パラメータ extern double TakeProfit = 1000.0; extern double Lots = 0.1; extern double StopLoss = 980.0; extern int Entry_Hour_1st = 21; //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパート初期化関数 //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| エキスパートスタート機能 //+------------------------------------------------------------------+ int MagicNumber; datetime GetLastClosedOrderTime() { datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (オーダーセレクト(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) CloseTime = OrderCloseTime()。 return(CloseTime); } int start() { //+------------------------------------------------------------------+ //-- トリガートレード //+------------------------------------------------------------------+ int ticket, total; double TP_Value、SL_Value; total = OrdersTotal(); // 現在開いているトレードの合計数をチェックする if(total < 1) { if (Hour()==Entry_Hour_1st && ((高[0] - 高[1]) > 0.00100) && ((高[1] - 低[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())) { if ((クローズ[1] - オープン[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); // ロングボディの値 SL_Value = (安値[1] - 0.0010); // 常にロングの場合、同じ値 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。 return(0); } if ((オープン[1] - クローズ[1]) > 0.00100) { TP_Value = (Open[1] - Close[1]); // ショートボディの値 SL_Value = (Low[1] - 0.0010); // 常にロングと同じ値 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。 return(0); } if ((オープン[1] - クローズ[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); // ヘッドとテールを含むローソク足全体の値 SL_Value = (安値[1] - 0.0010); // ロングでは常に同じ値 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value,「私のEA」,200,0,Green); return(0); } } if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime())) { if ((クローズ[1] - オープン[1]) > 0.00100) { TP_Value = (Close[1] - Open[1]); // ロングボディの値 SL_Value = (高値[1] + 0.0010); // 常にショートと同じ値 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red); return(0); } if ((オープン[1] - クローズ[1]) > 0.00100) { TP_Value = (Open[1] - Close[1]); // ショートボディの値 SL_Value = (高値[1] + 0.0010); // ショートの場合は常に同じ値 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red); return(0); } if ((オープン[1] - クローズ[1]) <= 0.00100) { TP_Value = (High[1] - Low[1]); // ヘッドとテールを含むローソク足全体の値 SL_Value = (高値[1] + 0.0010); // ショートの場合は常に同じ値 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red); return(0); } } } return(0)。 } //+------------------------------------------------------------------+ tkuan77 これを置き換えると. if(トータル < 1) を次のように置き換えてください。 if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ; そして、それはこれ以上しないようにする必要があります tkuan77 2015.12.28 14:28 #3437 mladen: tkuan77 これを置き換えると: if(合計 < 1) を次のように置き換えてください。 if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ; そして、これ以上、そんなことをしてはいけない mladenさん、コードを入力した後、1日1回の取引ではなく、口座が破裂するまで一度に複数の取引が誘発されました。これは、何らかのトリガーメカニズムによるものなのでしょうか? よろしくお願いします。 tkuan77 2016.01.11 15:32 #3438 こんにちは、mladenです。私はこの特定のコードを持っていて、取引を実行した後、持っているすべての保留中の取引を閉じます。 ありがとうございます。 int new_del() { int i,a; int total = OrdersTotal(); 文字列コメント,par; for (i=total-1; i >=0; i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if (OrderType()==OP_BUY || OrderType()==OP_SELL) { for (a=total-1; a >=0; a--) { OrderSelect(a,SELECT_BY_POS,MODE_TRADES); comentario=OrderComment(); par=StringSubstr(comentario,0,6)。 if(OrderType()==OP_SELLSTOP)// && comentario==Symbol()) { OrderDelete(OrderTicket()); Print("SELL_STOPを削除"," Ordertype:",OrderType()).Print("SELL_STOP"," Ordertype:",OrderType()); return(1); if(OrderType()==OP_BUYSTOP)// && par==Symbol()) { OrderDelete(OrderTicket()); Print("BUY_STOPを削除する"," Ordertype:",OrderType()).Print("BUY_STOP"," Ordertype:",OrderType()); return(1); } } } } } Deleting a pending order How to code? コーディングのヘルプ Mladen Rakic 2016.01.11 16:42 #3439 tkuan77: こんにちは、mladen。私はこの特定のコードを持っている私は、貿易を実行した後に持っているすべての保留中の取引を閉じますが、将来のすべての保留中の取引の代わりに、私が取引をトリガした後に私の現在の既存の保留中の取引のみをキャンセルするように設定するにはどうすればよいですか?ありがとうございます。 int new_del() { int i,a; int total = OrdersTotal(); 文字列コメント,par; for (i=total-1; i >=0; i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if (OrderType()==OP_BUY || OrderType()==OP_SELL) { for (a=total-1; a >=0; a--) { OrderSelect(a,SELECT_BY_POS,MODE_TRADES); comentario=OrderComment(); par=StringSubstr(comentario,0,6)。 if(OrderType()==OP_SELLSTOP)// && comentario==Symbol()) { OrderDelete(OrderTicket()); Print("SELL_STOPを削除"," Ordertype:",OrderType()).Print("SELL_STOP"," Ordertype:",OrderType()); return(1); if(OrderType()==OP_BUYSTOP)// && par==Symbol()) { OrderDelete(OrderTicket()); Print("BUY_STOPを削除する"," Ordertype:",OrderType()).Print("BUY_STOP"," Ordertype:",OrderType()); return(1); } } } } } tkuan77 現在の保留中の取引 "と "将来の保留中の取引 "は何を意味するのでしょうか? tkuan77 2016.01.12 06:57 #3440 mladen: tkuan77 現在の保留中の取引」の意味と「将来の保留中の取引」の意味について教えてください。 mladenさん、こんにちは。 現在の保留中の取引とは、ある条件が満たされると、2つの保留中の取引(ロングとショート)が設定されることを意味します。つまり、ロングトレードがトリガーされた場合、ショートトレードは自動的にキャンセルされます。 将来の取引待ちとは、前の取引待ちをキャンセルした後、再び条件を満たした場合、2つの取引待ち(ロングとショート)をセットすることです。 私がしようとしていることは、取引がトリガーされた後、システムが現在の保留中の取引だけをキャンセルするようにすることです。 よろしくお願いします。 1...337338339340341342343344345346347 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
tkuan77
最後に閉じたバーを見つけ、最後に閉じたバーの日が現在の日と同じかどうかを確認する必要があります。
この関数のようなものを使用して、最後のクローズドオーダーの時間を取得することができます。
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime();
}
return(CloseTime);
}
こんにちは、mladenさん。
しかし、この部分をどこに挿入すればいいのでしょうか?私はまだコーディングの初心者で、Forループがどのように機能するのか理解できないので、このような質問をするのは申し訳ないです。
よろしくお願いします。
ライアン
mladenさん、こんにちは。
しかし、この部分をどこに挿入すればいいのでしょうか?私はまだコーディングの初心者で、Forループがどのように機能するのか理解できないので、このような質問をするのは申し訳ないです。
よろしくお願いします。
ライアンライアン
次のような感じです。
if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()))。// 取引不可
ライアン
次のようなものです。
if (TimeDayOfYear(TimeCurrent())==TimeDayOfYear(GetLastClosedOrderTime()))。// 取引不可
こんにちは、mladenさん、コードを追加してみましたが、グローバル変数のエラーが出ているようです。また、MagicNumberという変数が定義されていないようですが、これは何のためにあるのでしょうか?intの下に追加したのですが、その変数の用途がよくわかりません。
アドバイスお願いします。ご迷惑をおかけしますが、よろしくお願いします。
//---- 入力パラメータ
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- トリガートレード
//+------------------------------------------------------------------+
int ticket, total, MagicNumber;
double TP_Value, SL_Value;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (オーダーセレクト(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime()。
return(CloseTime);
total = OrdersTotal(); // 現在開いている取引数の合計を確認する
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((高[0] - 高[1]) > 0.00100) && ((高[1] - 低[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
if ((クローズ[1] - オープン[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value=(安値[1] - 0.0010)。
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。
return(0);
}
if ((オープン[1] - クローズ[1]) > 0.00100)
{
TP_Value=(オープン[1]-クローズ[1]);
SL_Value=(安値[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value,「私のEA」,200,0,Green);
return(0);
}
if ((オープン[1] - クローズ[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]);
SL_Value=(安値[1] - 0.0010)。
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((安値[1] - 安値[0]) > 0.00100) && ((高値[1] - 安値[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
if ((クローズ[1] - オープン[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value=(High[1]+0.0010)となります。
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red);
return(0);
}
if ((オープン[1] - クローズ[1]) > 0.00100)
{
TP_Value=(オープン[1]-クローズ[1])。
SL_Value=(高値[1]+0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red);
return(0);
}
if ((オープン[1] - クローズ[1]) <= 0.00100)
{
TP_Value = (高値[1] - 安値[1]);
SL_Value=(高値[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value,「私のEA」,200,0,Red);
return(0);
}
}
}
return(0)。
}
//+------------------------------------------------------------------+
mladenさん、コードを追加したのですが、グローバル変数のエラーが出ているようです。また、MagicNumberという変数が定義されていないようですが、これは何のためにあるのでしょうか?intの下に追加したのですが、その変数の用途がよくわかりません。
アドバイスお願いします。ご迷惑をおかけしますが、よろしくお願いします。
//---- 入力パラメータ
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int start()
{
//+------------------------------------------------------------------+
//-- トリガートレード
//+------------------------------------------------------------------+
int ticket, total, MagicNumber;
double TP_Value, SL_Value;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (オーダーセレクト(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime()。
return(CloseTime);
total = OrdersTotal(); // 現在開いている取引数の合計を確認する
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((高[0] - 高[1]) > 0.00100) && ((高[1] - 低[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
if ((クローズ[1] - オープン[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value=(安値[1] - 0.0010)。
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。
return(0);
}
if ((オープン[1] - クローズ[1]) > 0.00100)
{
TP_Value=(オープン[1]-クローズ[1]);
SL_Value=(安値[1] - 0.0010);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。
return(0);
}
if ((オープン[1] - クローズ[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]);
SL_Value=(安値[1] - 0.0010)。
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value,「私のEA」,200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((安値[1] - 安値[0]) > 0.00100) && ((高値[1] - 安値[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
if ((クローズ[1] - オープン[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]);
SL_Value=(High[1]+0.0010)となります。
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red);
return(0);
}
if ((オープン[1] - クローズ[1]) > 0.00100)
{
TP_Value=(オープン[1]-クローズ[1])。
SL_Value=(高値[1]+0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red);
return(0);
}
if ((オープン[1] - クローズ[1]) <= 0.00100)
{
TP_Value = (高値[1] - 安値[1]);
SL_Value=(高値[1] + 0.0010);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value,「私のEA」,200,0,Red);
return(0);
}
}
}
return(0)。
}
//+------------------------------------------------------------------+
これは関数 です
start()関数の本体の外に移動させる
↵
これは関数です
start()関数の本体外に移動させるこんにちは、mladenさん、私は関数を Start関数の外に移動してみましたが、私のEAは1日に1つの取引しかトリガーしないように制限する代わりに、1日に複数の取引をトリガーしたままです。
ご教示いただきありがとうございます。
ご指摘の通りです。
//---- 入力パラメータ
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int MagicNumber;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (オーダーセレクト(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime()。
return(CloseTime);
}
int start()
{
//+------------------------------------------------------------------+
//-- トリガートレード
//+------------------------------------------------------------------+
int ticket, total;
double TP_Value、SL_Value;
total = OrdersTotal(); // 現在開いているトレードの合計数をチェックする
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((高[0] - 高[1]) > 0.00100) && ((高[1] - 低[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
if ((クローズ[1] - オープン[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // ロングボディの値
SL_Value = (安値[1] - 0.0010); // 常にロングの場合、同じ値
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。
return(0);
}
if ((オープン[1] - クローズ[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // ショートボディの値
SL_Value = (Low[1] - 0.0010); // 常にロングと同じ値
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。
return(0);
}
if ((オープン[1] - クローズ[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // ヘッドとテールを含むローソク足全体の値
SL_Value = (安値[1] - 0.0010); // ロングでは常に同じ値
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value,「私のEA」,200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((安値[1] - 安値[0]) > 0.00100) && ((高値[1] - 安値[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
if ((クローズ[1] - オープン[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // ロングボディの値
SL_Value = (High[1] + 0.0010); // 常にショートと同じ値
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red);
return(0);
}
if ((オープン[1] - クローズ[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // ショートボディの値
SL_Value = (高値[1] + 0.0010); // ショートの場合は常に同じ値
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value, "私の EA",200,0,Red);
return(0);
}
if ((オープン[1] - クローズ[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // ヘッドとテールを含むローソク足全体の値
SL_Value = (高値[1] + 0.0010); // ショートの場合は常に同じ値
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Value,Bid-TP_Value,「私のEA」,200,0,Red);
return(0);
}
}
}
return(0)。
}
//+------------------------------------------------------------------+
↵
mladenさん、こんにちは。Start関数の外に関数を移動してみましたが、私のEAは1日に1つの取引しかトリガーしないように制限する代わりに、1日に複数の取引をトリガーするようになりました。
ご教示いただきありがとうございます。
ご指摘の通りです。
//---- 入力パラメータ
extern double TakeProfit = 1000.0;
extern double Lots = 0.1;
extern double StopLoss = 980.0;
extern int Entry_Hour_1st = 21;
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパート初期化関数
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| エキスパートスタート機能
//+------------------------------------------------------------------+
int MagicNumber;
datetime GetLastClosedOrderTime()
{
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (オーダーセレクト(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
CloseTime = OrderCloseTime()。
return(CloseTime);
}
int start()
{
//+------------------------------------------------------------------+
//-- トリガートレード
//+------------------------------------------------------------------+
int ticket, total;
double TP_Value、SL_Value;
total = OrdersTotal(); // 現在開いているトレードの合計数をチェックする
if(total < 1)
{
if (Hour()==Entry_Hour_1st && ((高[0] - 高[1]) > 0.00100) && ((高[1] - 低[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
if ((クローズ[1] - オープン[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // ロングボディの値
SL_Value = (安値[1] - 0.0010); // 常にロングの場合、同じ値
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。
return(0);
}
if ((オープン[1] - クローズ[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // ショートボディの値
SL_Value = (Low[1] - 0.0010); // 常にロングと同じ値
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value, "私のEA",200,0,Green)。
return(0);
}
if ((オープン[1] - クローズ[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // ヘッドとテールを含むローソク足全体の値
SL_Value = (安値[1] - 0.0010); // ロングでは常に同じ値
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,SL_Value,Ask+TP_Value,「私のEA」,200,0,Green);
return(0);
}
}
if (Hour()==Entry_Hour_1st && ((Low[1] - Low[0]) > 0.00100) && ((High[1] - Low[1]) > 0.00100) && TimeDayOfYear(TimeCurrent()) != TimeDayOfYear(GetLastClosedOrderTime()))
{
if ((クローズ[1] - オープン[1]) > 0.00100)
{
TP_Value = (Close[1] - Open[1]); // ロングボディの値
SL_Value = (高値[1] + 0.0010); // 常にショートと同じ値
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((オープン[1] - クローズ[1]) > 0.00100)
{
TP_Value = (Open[1] - Close[1]); // ショートボディの値
SL_Value = (高値[1] + 0.0010); // ショートの場合は常に同じ値
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
if ((オープン[1] - クローズ[1]) <= 0.00100)
{
TP_Value = (High[1] - Low[1]); // ヘッドとテールを含むローソク足全体の値
SL_Value = (高値[1] + 0.0010); // ショートの場合は常に同じ値
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,SL_Va lue,Bid-TP_Value, "My EA",200,0,Red);
return(0);
}
}
}
return(0)。
}
//+------------------------------------------------------------------+
tkuan77
これを置き換えると.
if(トータル < 1)
を次のように置き換えてください。
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
そして、それはこれ以上しないようにする必要があります
tkuan77
これを置き換えると:
if(合計 < 1)
を次のように置き換えてください。
if (total < 1 && TimeDayOfYear(GetLastClosedOrderTime()) != TimeDayOfYear(TimeCurrent())) ;
そして、これ以上、そんなことをしてはいけないmladenさん、コードを入力した後、1日1回の取引ではなく、口座が破裂するまで一度に複数の取引が誘発されました。これは、何らかのトリガーメカニズムによるものなのでしょうか?
よろしくお願いします。
こんにちは、mladenです。私はこの特定のコードを持っていて、取引を実行した後、持っているすべての保留中の取引を閉じます。
ありがとうございます。
int new_del()
{
int i,a;
int total = OrdersTotal();
文字列コメント,par;
for (i=total-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=total-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
comentario=OrderComment();
par=StringSubstr(comentario,0,6)。
if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket());
Print("SELL_STOPを削除"," Ordertype:",OrderType()).Print("SELL_STOP"," Ordertype:",OrderType());
return(1);
if(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket());
Print("BUY_STOPを削除する"," Ordertype:",OrderType()).Print("BUY_STOP"," Ordertype:",OrderType());
return(1);
}
}
}
}
}
こんにちは、mladen。私はこの特定のコードを持っている私は、貿易を実行した後に持っているすべての保留中の取引を閉じますが、将来のすべての保留中の取引の代わりに、私が取引をトリガした後に私の現在の既存の保留中の取引のみをキャンセルするように設定するにはどうすればよいですか?
ありがとうございます。
int new_del()
{
int i,a;
int total = OrdersTotal();
文字列コメント,par;
for (i=total-1; i >=0; i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{
for (a=total-1; a >=0; a--)
{
OrderSelect(a,SELECT_BY_POS,MODE_TRADES);
comentario=OrderComment();
par=StringSubstr(comentario,0,6)。
if(OrderType()==OP_SELLSTOP)// && comentario==Symbol())
{
OrderDelete(OrderTicket());
Print("SELL_STOPを削除"," Ordertype:",OrderType()).Print("SELL_STOP"," Ordertype:",OrderType());
return(1);
if(OrderType()==OP_BUYSTOP)// && par==Symbol())
{
OrderDelete(OrderTicket());
Print("BUY_STOPを削除する"," Ordertype:",OrderType()).Print("BUY_STOP"," Ordertype:",OrderType());
return(1);
}
}
}
}
}tkuan77
現在の保留中の取引 "と "将来の保留中の取引 "は何を意味するのでしょうか?
tkuan77
現在の保留中の取引」の意味と「将来の保留中の取引」の意味について教えてください。
mladenさん、こんにちは。
現在の保留中の取引とは、ある条件が満たされると、2つの保留中の取引(ロングとショート)が設定されることを意味します。つまり、ロングトレードがトリガーされた場合、ショートトレードは自動的にキャンセルされます。
将来の取引待ちとは、前の取引待ちをキャンセルした後、再び条件を満たした場合、2つの取引待ち(ロングとショート)をセットすることです。
私がしようとしていることは、取引がトリガーされた後、システムが現在の保留中の取引だけをキャンセルするようにすることです。
よろしくお願いします。