どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1093

 
A13ksandr:ごめんなさい!もちろん、すべてはvoid OnTick()の中で行われます。 書きました)
それから、テスターのログにエラーコードが あるので、それを使って解決してください。
 
evillive:
そうすると、テスターのログにエラーコードが記録され、それを元にさらに調査ができるようになります。

エラーはありません。プロシージャの入力でハングアップしてしまうんです。あと、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();

}

}

}

}

}

}

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

 
alvlaf:

CountTrades関数からOrderSymbol() == Symbol()の条件を削除して、OrderType() == OP_BUY || OrderType() == OP_SELLを追加すればいいんでしょう?

そして、OrderSendの前のOnTickでif (SignalBuy() && CountTrades() < MaxOpenOrders)の条件を変更する...。Sellも同様です。
 
A13ksandr:
ありがとうございます、試してみました。ボットはすべてのティックで たくさんの注文を開くようになりました。
 
A13ksandr:

if (OrderMagicNumber() == Magic && (OrderType() == OP_BUY || OrderType() == OP_SELL))

正しく変更できたか?

 
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関数をここで捨てることもできます。
 
evillive:


時刻を直接日時形式で設定できるので、変換のために機械時間を浪費する必要がなく、次のように動作します。

extern datetime StartTime = D'07:00'

この時間の形式では、EAを起動するとコンパイルの日付が表示されますが、コンパイルの日付は今日にしたいのです。

どのように修正するのか?

 
RichLux:

このタイムフォーマットでは、EAを起動するとEAのコンパイル日が表示されますが、今日の日付が欲しいのです。

どうすれば直るのか?

他のユーザーパラメータと同様に、起動時に目的のパラメータに変更します。

そして、なぜかスクリプトを実行した時点の現在の日付が表示される。

 
LRA:
MagicNumberを使う目的は何でしょうか、このストラテジーで 何を与えてくれるのでしょうか、教えてください。IMHOでは、OnInit OnDeinit関数もここで捨てることができます。
この戦略では」という言葉は、どのような目的で使われているのでしょうか。口座内で手動で取引を行う場合、または別のExpert Advisorを実行する場合、これらの注文に触れないようにするためにマジックが必要です。そうだと思います。