どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1093 1...108610871088108910901091109210931094109510961097109810991100...1178 新しいコメント Vitalie Postolache 2016.09.09 05:40 #10921 A13ksandr:ごめんなさい!もちろん、すべてはvoid OnTick()の中で行われます。 書きました) それから、テスターのログにエラーコードが あるので、それを使って解決してください。 A13ksandr 2016.09.09 06:07 #10922 evillive: そうすると、テスターのログにエラーコードが記録され、それを元にさらに調査ができるようになります。エラーはありません。プロシージャの入力でハングアップしてしまうんです。あと、StartSellもありますね、普通に入ります。これは、ある種の混乱だ。引用元を更新したら、うまくいきました。一部穴が開いていて正しくないが、少なくともぶら下がることはない。 Aleksandr Afanasenko 2016.09.09 07:01 #10923 はじめまして、バイナリーオプションで異なる商品のシリーズを設定数以上同時に開かないようにする(ボットが異なる商品の複数のチャートに同時に付く)最善の方法を教えていただけないでしょうか。extern double Lots = 1; // ロット数extern int Exp = 1; // 有効期限extern int Wait = 0; // 一方向のローソク足の本数extern int Timeout = 1; // タイムスロットextern double Multiplier = 3; // 乗算器extern int int Slippage = 5; // スリッページextern int MaxOpenOrders = 1; // 同時に開く注文の最大数extern int Magic = 774274; // マジックint ticket、Type;ダブルプライス、ロット//+------------------------------------------------------------------+//| 専門家による初期化機能//+------------------------------------------------------------------+int OnInit(){return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| 専門家による初期化関数//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+//| エキスパートティック機能//+------------------------------------------------------------------+void OnTick(){// --------------- オープン・トレード --------------if (CountTrades() == 0) // 注文数はゼロでなければならない。{if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))// 最後の取引が負けた場合、同じ取引が開始されますが、ロットは大きくなります。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price = Ask;if (Type == OP_SELL) Price = Bid;Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)//最後の取引の利益が ゼロに等しい場合、同じ取引が開始されます。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price = Ask;if (Type == OP_SELL) Price = Bid;Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。{if (SignalBuy() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)です。}if (SignalSell() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)です。}}}}//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0;for (int i=OrdersTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+int CountHistTrades(int type = -1){int cnt = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+bool SignalBuy(){for (int i=1; i<=Wait; i++){if (クローズ[i] > オープン[i]) return(false)}if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder() +Timeout))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+bool SignalSell(){for (int i=1; i<=Wait; i++){if (クローズ[i] < オープン[i]) return(false)}if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder() +Timeout))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))){if (OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime();}}}}return(opentime);}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){if (OrderCloseTime() > time){time = OrderCloseTime();type = OrderType();}}}}return(type)です。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;ダブルロット = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))){if (OrderOpenTime() > time){time = OrderOpenTime();time = OrderLots();}}}}return(lots)です。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderClosePrice()。}}}}}}//+------------------------------------------------------------------+double PriceOpenLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderOpenPrice();}}}}}}//+------------------------------------------------------------------+ Any rookie question, so MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 A13ksandr 2016.09.09 08:53 #10924 alvlaf:CountTrades関数からOrderSymbol() == Symbol()の条件を削除して、OrderType() == OP_BUY || OrderType() == OP_SELLを追加すればいいんでしょう? そして、OrderSendの前のOnTickでif (SignalBuy() && CountTrades() < MaxOpenOrders)の条件を変更する...。Sellも同様です。 Aleksandr Afanasenko 2016.09.09 12:12 #10925 A13ksandr: ありがとうございます、試してみました。ボットはすべてのティックで たくさんの注文を開くようになりました。 Aleksandr Afanasenko 2016.09.09 12:18 #10926 A13ksandr: if (OrderMagicNumber() == Magic && (OrderType() == OP_BUY || OrderType() == OP_SELL))正しく変更できたか? 削除済み 2016.09.09 14:08 #10927 alvlaf:はじめまして、バイナリーオプションで異なる商品のシリーズを設定数以上同時に開かないようにする(ボットが異なる商品の複数のチャートに同時に付く)最善の方法を教えていただけないでしょうか。extern double Lots = 1; // ロット数extern int Exp = 1; // 有効期限extern int Wait = 0; // 一方向のローソク足の本数extern int Timeout = 1; // タイムスロットextern double Multiplier = 3; // 乗算器extern int int Slippage = 5; // スリッページextern int MaxOpenOrders = 1; // 同時に開く注文の最大数extern int Magic = 774274; // マジックint ticket、Type;ダブルプライス、ロット//+------------------------------------------------------------------+//| 専門家による初期化機能//+------------------------------------------------------------------+int OnInit(){return(INIT_SUCCEEDED);}//+------------------------------------------------------------------+//| 専門家による初期化関数//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+//| エキスパートティック機能//+------------------------------------------------------------------+void OnTick(){// --------------- オープン・トレード --------------if (CountTrades() == 0) // 注文数はゼロでなければならない。{if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))// 最後の取引が負けた場合、同じ取引が開始されますが、ロットは大きくなります。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price = Ask;if (Type == OP_SELL) Price = Bid;Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)// 最後の取引の利益がゼロに等しい場合、同じ取引が開始されます。{Type = TypeLastHistOrder();if (Type == OP_BUY) Price = Ask;if (Type == OP_SELL) Price = Bid;Lot = NormalizeDouble(LotsLastHistOrder(), 2);ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);}if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。{if (SignalBuy() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)です。}if (SignalSell() && MaxOpenOrders > OrdersTotal()){ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)です。}}}}//+------------------------------------------------------------------+int CountTrades(int type = -1){int cnt = 0;for (int i=OrdersTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+int CountHistTrades(int type = -1){int cnt = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))cnt++です。}}return(cnt);}//+------------------------------------------------------------------+bool SignalBuy(){for (int i=1; i<=Wait; i++){if (クローズ[i] > オープン[i]) return(false)}if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder() +Timeout))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+bool SignalSell(){for (int i=1; i<=Wait; i++){if (クローズ[i] < オープン[i]) return(false)}if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder() +Timeout))&& CountHistTrades() > 0) return(true);if (CountHistTrades() == 0) return(true);return(false)です。}//+------------------------------------------------------------------+datetime TimeLastHistOrder(int type = -1){datetime lasttime = 0;datetime opentime = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))){if (OrderCloseTime() > lasttime){lasttime = OrderCloseTime();opentime = OrderOpenTime();}}}}return(opentime);}//+------------------------------------------------------------------+int TypeLastHistOrder(){datetime time = 0;int type = -1;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){if (OrderCloseTime() > time){time = OrderCloseTime();type = OrderType();}}}}return(type)です。}//+------------------------------------------------------------------+double LotsLastHistOrder(int type = -1){datetime time = 0;ダブルロット = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))){if (OrderOpenTime() > time){time = OrderOpenTime();time = OrderLots();}}}}return(lots)です。}//+------------------------------------------------------------------+double PriceCloseLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderClosePrice()。}}}}}}//+------------------------------------------------------------------+double PriceOpenLastHistOrder(int type = -1){datetime time = 0;二重価格 = 0;for (int i=OrdersHistoryTotal()-1; i>=0; i--){if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1))){if (OrderCloseTime() > time){time = OrderCloseTime();price = OrderOpenPrice();}}}}}}//+------------------------------------------------------------------+ MagicNumberをどのような目的で使用されているのか、このストラテジーで どのような効果があるのか教えてください。IMHOでは、OnInit OnDeinit関数をここで捨てることもできます。 RichLux 2016.09.09 17:12 #10928 evillive:時刻を直接日時形式で設定できるので、変換のために機械時間を浪費する必要がなく、次のように動作します。extern datetime StartTime = D'07:00'。この時間の形式では、EAを起動するとコンパイルの日付が表示されますが、コンパイルの日付は今日にしたいのです。どのように修正するのか? Vitalie Postolache 2016.09.09 18:57 #10929 RichLux:このタイムフォーマットでは、EAを起動するとEAのコンパイル日が表示されますが、今日の日付が欲しいのです。どうすれば直るのか?他のユーザーパラメータと同様に、起動時に目的のパラメータに変更します。そして、なぜかスクリプトを実行した時点の現在の日付が表示される。 A13ksandr 2016.09.10 11:23 #10930 LRA: MagicNumberを使う目的は何でしょうか、このストラテジーで 何を与えてくれるのでしょうか、教えてください。IMHOでは、OnInit OnDeinit関数もここで捨てることができます。 この戦略では」という言葉は、どのような目的で使われているのでしょうか。口座内で手動で取引を行う場合、または別のExpert Advisorを実行する場合、これらの注文に触れないようにするためにマジックが必要です。そうだと思います。 1...108610871088108910901091109210931094109510961097109810991100...1178 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
そうすると、テスターのログにエラーコードが記録され、それを元にさらに調査ができるようになります。
エラーはありません。プロシージャの入力でハングアップしてしまうんです。あと、StartSellもありますね、普通に入ります。これは、ある種の混乱だ。
引用元を更新したら、うまくいきました。一部穴が開いていて正しくないが、少なくともぶら下がることはない。
はじめまして、バイナリーオプションで異なる商品のシリーズを設定数以上同時に開かないようにする(ボットが異なる商品の複数のチャートに同時に付く)最善の方法を教えていただけないでしょうか。
extern double Lots = 1; // ロット数
extern int Exp = 1; // 有効期限
extern int Wait = 0; // 一方向のローソク足の本数
extern int Timeout = 1; // タイムスロット
extern double Multiplier = 3; // 乗算器
extern int int Slippage = 5; // スリッページ
extern int MaxOpenOrders = 1; // 同時に開く注文の最大数
extern int Magic = 774274; // マジック
int ticket、Type;
ダブルプライス、ロット
//+------------------------------------------------------------------+
//| 専門家による初期化機能
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| エキスパートティック機能
//+------------------------------------------------------------------+
void OnTick()
{
// --------------- オープン・トレード --------------
if (CountTrades() == 0) // 注文数はゼロでなければならない。
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// 最後の取引が負けた場合、同じ取引が開始されますが、ロットは大きくなります。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = Ask;
if (Type == OP_SELL) Price = Bid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
//最後の取引の利益が ゼロに等しい場合、同じ取引が開始されます。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = Ask;
if (Type == OP_SELL) Price = Bid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。
{
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)です。
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)です。
}
}
}
}
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy()
{
for (int i=1; i<=Wait; i++)
{
if (クローズ[i] > オープン[i]) return(false)
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder() +Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
bool SignalSell()
{
for (int i=1; i<=Wait; i++)
{
if (クローズ[i] < オープン[i]) return(false)
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder() +Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type)です。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
ダブルロット = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
{
if (OrderOpenTime() > time)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots)です。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderClosePrice()。
}
}
}
}
}
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderOpenPrice();
}
}
}
}
}
}
//+------------------------------------------------------------------+
CountTrades関数からOrderSymbol() == Symbol()の条件を削除して、OrderType() == OP_BUY || OrderType() == OP_SELLを追加すればいいんでしょう?
そして、OrderSendの前のOnTickでif (SignalBuy() && CountTrades() < MaxOpenOrders)の条件を変更する...。Sellも同様です。if (OrderMagicNumber() == Magic && (OrderType() == OP_BUY || OrderType() == OP_SELL))
正しく変更できたか?
はじめまして、バイナリーオプションで異なる商品のシリーズを設定数以上同時に開かないようにする(ボットが異なる商品の複数のチャートに同時に付く)最善の方法を教えていただけないでしょうか。
extern double Lots = 1; // ロット数
extern int Exp = 1; // 有効期限
extern int Wait = 0; // 一方向のローソク足の本数
extern int Timeout = 1; // タイムスロット
extern double Multiplier = 3; // 乗算器
extern int int Slippage = 5; // スリッページ
extern int MaxOpenOrders = 1; // 同時に開く注文の最大数
extern int Magic = 774274; // マジック
int ticket、Type;
ダブルプライス、ロット
//+------------------------------------------------------------------+
//| 専門家による初期化機能
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 専門家による初期化関数
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| エキスパートティック機能
//+------------------------------------------------------------------+
void OnTick()
{
// --------------- オープン・トレード --------------
if (CountTrades() == 0) // 注文数はゼロでなければならない。
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))
// 最後の取引が負けた場合、同じ取引が開始されますが、ロットは大きくなります。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = Ask;
if (Type == OP_SELL) Price = Bid;
Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2)です。
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// 最後の取引の利益がゼロに等しい場合、同じ取引が開始されます。
{
Type = TypeLastHistOrder();
if (Type == OP_BUY) Price = Ask;
if (Type == OP_SELL) Price = Bid;
Lot = NormalizeDouble(LotsLastHistOrder(), 2);
ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))
|| CountHistTrades() == 0)// 最後の取引で利益が出た場合、注文が開かれます。
{
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic)です。
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic)です。
}
}
}
}
//+------------------------------------------------------------------+
int CountTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
int CountHistTrades(int type = -1)
{
int cnt = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
cnt++です。
}
}
return(cnt);
}
//+------------------------------------------------------------------+
bool SignalBuy()
{
for (int i=1; i<=Wait; i++)
{
if (クローズ[i] > オープン[i]) return(false)
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder() +Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
bool SignalSell()
{
for (int i=1; i<=Wait; i++)
{
if (クローズ[i] < オープン[i]) return(false)
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= Wait || (Wait == 0 && TimeCurrent() >= TimeLastHistOrder() +Timeout))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
return(false)です。
}
//+------------------------------------------------------------------+
datetime TimeLastHistOrder(int type = -1)
{
datetime lasttime = 0;
datetime opentime = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
{
if (OrderCloseTime() > lasttime)
{
lasttime = OrderCloseTime();
opentime = OrderOpenTime();
}
}
}
}
return(opentime);
}
//+------------------------------------------------------------------+
int TypeLastHistOrder()
{
datetime time = 0;
int type = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
type = OrderType();
}
}
}
}
return(type)です。
}
//+------------------------------------------------------------------+
double LotsLastHistOrder(int type = -1)
{
datetime time = 0;
ダブルロット = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
{
if (OrderOpenTime() > time)
{
time = OrderOpenTime();
time = OrderLots();
}
}
}
}
return(lots)です。
}
//+------------------------------------------------------------------+
double PriceCloseLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderClosePrice()。
}
}
}
}
}
}
//+------------------------------------------------------------------+
double PriceOpenLastHistOrder(int type = -1)
{
datetime time = 0;
二重価格 = 0;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == type || type == -1)))
{
if (OrderCloseTime() > time)
{
time = OrderCloseTime();
price = OrderOpenPrice();
}
}
}
}
}
}
//+------------------------------------------------------------------+
時刻を直接日時形式で設定できるので、変換のために機械時間を浪費する必要がなく、次のように動作します。
extern datetime StartTime = D'07:00'。
この時間の形式では、EAを起動するとコンパイルの日付が表示されますが、コンパイルの日付は今日にしたいのです。
どのように修正するのか?
このタイムフォーマットでは、EAを起動するとEAのコンパイル日が表示されますが、今日の日付が欲しいのです。
どうすれば直るのか?
他のユーザーパラメータと同様に、起動時に目的のパラメータに変更します。
そして、なぜかスクリプトを実行した時点の現在の日付が表示される。
MagicNumberを使う目的は何でしょうか、このストラテジーで 何を与えてくれるのでしょうか、教えてください。IMHOでは、OnInit OnDeinit関数もここで捨てることができます。