MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 39 1...323334353637383940414243444546...1953 新しいコメント 削除済み 2016.12.19 21:33 #381 trader781: どう説明したらいいのかわからない。でも、間違いなく名作です。 この辺は皮肉が好きなんですよ(笑)。トリシュキンはそれに腹を立て、コードを用意すると言った。 Mickey Moose 2016.12.19 21:38 #382 Movlat Baghiyev: この辺の皮肉が好きなんだと言っているんだ )))トリスキンもこれに腹を立てた。 コードがあるから助けてくれる、と。私もあなたと同じように初心者ですが、そんな私にもたくさんの疑問があります。for(int i=0; i<OrdersTotal(); i++){if(OrderSelect(i.),SELECT_BY_POS)==true){if(OrderSymbol()!=Symbol() ||OrderMagicNumber()!=Magic) continue;if(OrderType()==OP_BUY||)OrderType()==OP_SELL) p++;if(OrderType()==OP_BUYSTOP)if(signal_bue)OrderDelete(OrderTicket());else b++; if(OrderType()==OP_SELLSTOP) if(signal_sell)OrderDelete(OrderTicket());else s++;}.}1)b++はどこで手に入れたのですか?2)s++は どこで手に入れましたか?3)if(signal_bue) is what else?そして残りのコードも。気を悪くされたらごめんなさい。 Any questions from newcomers コーディングのヘルプ [警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 削除済み 2016.12.19 21:45 #383 それが正しいのでしょう//+------------------------------------------------------------------+//| ОТЛОЖКИ.mq4 |//+------------------------------------------------------------------+extern double StopLoss = 100; //Стоплосс ордера extern double TakeProfit = 150; //Тейкпрофит ордераextern double TrailingStop = 100; // трал extern int Delta = 100; //Расстояние от цены для установки ордераextern double LOT = 0.1; //Объём позицииextern int Magic =2;//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start() { if (TrailingStop!=0) Trailing(); //ИНДИКАТОР RSI double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0); double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1); int b = 0, s = 0, p = 0, res = 0; double BuyPrice=Ask+Delta*Point; double SellPrice=Bid-Delta*Point; for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)==true) { if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++; if (OrderType()==OP_BUYSTOP) { if(RSI0<50&&RSI1>50) OrderDelete(OrderTicket()); else b++; } if (OrderType()==OP_SELLSTOP) { if(RSI0>50&&RSI1<50) OrderDelete(OrderTicket()); else s++; } } } double SL,TP; // < !!!!!!!!! эти переменные не используются, можно удалить//---- buy stop if(RSI0>50&&RSI1<50 && p<1 && b<1) // < !!!!!!!!! { res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue); } //---- sell stop if(RSI0<50&&RSI1>50 && p<1 && s<1) // < !!!!!!!!! { res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red); }//---- return(0);} Any questions from newcomers RSI EA code help Errors, bugs, questions Alekseu Fedotov 2016.12.19 21:46 #384 Movlat Baghiyev: この辺は皮肉が好きなんですよ(笑)。トリシキンはそれを見て怒ったんだ コードで助けると言ったんだその方がシンプルでいいですよね。void OrderDelete_(int Type) { for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if(OrderType()==Type) OrderDelete(OrderTicket()); } } }void OnTick()関数の外側のどこかにあります。if (сигнал_bue) OrderDelete_(OP_SELLSTOP);if (сигнал_sell)OrderDelete_(OP_BUYSTOP);そして、これはvoid OnTick()関数 本体の中です。 Any questions from newcomers 初心者の方からの質問 MQL5 MT5 MetaTrader メソッド宣言の後の const 修飾子の意味 削除済み 2016.12.19 21:49 #385 Alekseu Fedotov:そして、これは void OnTick()関数 本体の中にあります。 コードに修正を加えてください Vitalie Postolache 2016.12.19 21:57 #386 trader781:なるほど。できることは、なんとなく終わらせた。描写はできている。目的は、なぜ思い通りに動かないのかを理解するためです。if()ブロックの中にelseが あります。本当にこのような意図があったのでしょうか?さらにCounts()関数は、初期化されていないグローバル変数 countを受け入れ、さらに、関数内部でもう一度定義されます。Counts()関数は注文をカウントしますが、メイン関数内で何度か変更されるあるチケットと比較します。ただし、ファンクション操作中のチケットの値は同じです。では、この関数はいくつのオーダーを計算するのでしょうか。複数あるのでしょうか?この形式では、この関数は引数を必要とせず、ただ呼び出して結果を返すだけである。次のページ関数FindLastOType()は、再びチケットとの比較になります。有効なチケットと比較して保証できるのか?必要なマジックナンバーとシンボルを持つ最初の注文が見つかった時点でループを中断し、注文の種類を返す方がシンプルではないでしょうか?FindLastOrderOpenPrice()、FindLastLot()と同じです。ModifyOrders()関数は、悪夢を見ずに眠るために長い間調べないほど、私をぞっとさせた...。 Alekseu Fedotov 2016.12.19 22:11 #387 Movlat Baghiyev: コードに修正を加えてください使ってみてください ^_~。extern double StopLoss = 100; //Стоплосс ордера extern double TakeProfit = 150; //Тейкпрофит ордераextern double TrailingStop = 100; // трал extern int Delta = 100; //Расстояние от цены для установки ордераextern double LOT = 0.1; //Объём позицииextern int Magic =2;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//--- create timer //--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- destroy timer }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { int res = 0;//ИНДИКАТОР RSI double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0); double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1); double BuyPrice=Ask+Delta*Point; double SellPrice=Bid-Delta*Point; //---- buy stop if(RSI0>50&&RSI1<50 && Number(OP_BUYSTOP)<0 && Number(OP_BUY)<1) // < !!!!!!!!! { res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue); } //---- sell stop if(RSI0<50&&RSI1>50 && Number(OP_SELLSTOP)<0 && Number(OP_SELL)<1) // < !!!!!!!!! { res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red); }//---- if (RSI0>50&&RSI1<50) OrderDelete_(OP_SELLSTOP);if (RSI0<50&&RSI1>50)OrderDelete_(OP_BUYSTOP); }//+------------------------------------------------------------------+void OrderDelete_(int Type) { bool r; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if(OrderType()==Type) r = OrderDelete(OrderTicket()); } } }//+------------------------------------------------------------------+//+------------------------------------------------------------------+int Number(int Type) { int kp=0; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS)==true) { if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue; if(OrderType()==Type) kp++; } } return(kp); }//+------------------------------------------------------------------+ Any questions from newcomers RSI EA code help 初心者の方からの質問 MQL4 MT4 MetaTrader 削除済み 2016.12.19 22:18 #388 アレクセウ・フェドートフ ありがとうございます 神のご加護を。 Mickey Moose 2016.12.19 22:24 #389 Vitalie Postolache:if()ブロックの中にelseが あります。本当にそういうことだったのだろうか。さらにCounts()関数は、初期化されていないグローバル変数 countを受け取りますが、この変数も関数自体の中でもう一度宣言されます。Counts()関数は注文をカウントしますが、メイン関数内で数回変化するあるチケットと比較します。ただし、ファンクション操作中のチケットの値は同じです。では、この関数はいくつのオーダーを計算するのでしょうか。複数あるのでしょうか?この形式では、この関数は引数を必要とせず、ただ呼び出して結果を返すだけである。次のページ関数FindLastOType()は、再びチケットとの比較になります。有効なチケットと比較して保証できるのか?必要なマジックナンバーとシンボルを持つ最初の注文が見つかった時点でループを中断し、注文の種類を返す方がシンプルではないでしょうか?FindLastOrderOpenPrice()、FindLastLot()と同じです。Function ModifyOrders()が怖くて、夜中に悪夢を見ないように、ずっと調べないようにしていたのですが...。訂正それ以外の場所に置くと、間違ったパラメータになってしまうからです最新の情報を考慮する必要があります。変えてみる。標準のOrderModify()を使ってみたが、大量の注文を同時に動かすと禁止され、常に講評をありがとうございました。 Artyom Trishkin 2016.12.19 23:50 #390 spoiltboy: はい、ブラケットの誤植です。それ以外の質問は有効です。bool condition;if(condition) {}と同じif(condition==true) {}иif(!condition) {}イコールif(condition==false) {}ただ、より短く、より身近になっただけです。 1...323334353637383940414243444546...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
どう説明したらいいのかわからない。でも、間違いなく名作です。
この辺の皮肉が好きなんだと言っているんだ )))トリスキンもこれに腹を立てた。 コードがあるから助けてくれる、と。
私もあなたと同じように初心者ですが、そんな私にもたくさんの疑問があります。
for(int i=0; i<OrdersTotal(); i++){
if(OrderSelect(i.),SELECT_BY_POS)==true)
{
if(OrderSymbol()!=Symbol() ||OrderMagicNumber()!=Magic) continue;
if(OrderType()==OP_BUY||)OrderType()==OP_SELL) p++;
if(OrderType()==OP_BUYSTOP)
if(signal_bue)OrderDelete(OrderTicket());
else b++;
if(OrderType()==OP_SELLSTOP)
if(signal_sell)OrderDelete(OrderTicket());
else s++;
}.
}
1)b++はどこで手に入れたのですか?
2)s++は どこで手に入れましたか?
3)if(signal_bue) is what else?
そして残りのコードも。気を悪くされたらごめんなさい。
//| ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss = 100; //Стоплосс ордера
extern double TakeProfit = 150; //Тейкпрофит ордера
extern double TrailingStop = 100; // трал
extern int Delta = 100; //Расстояние от цены для установки ордера
extern double LOT = 0.1; //Объём позиции
extern int Magic =2;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (TrailingStop!=0) Trailing();
//ИНДИКАТОР RSI
double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
int b = 0, s = 0, p = 0, res = 0;
double BuyPrice=Ask+Delta*Point;
double SellPrice=Bid-Delta*Point;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS)==true)
{
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) p++;
if (OrderType()==OP_BUYSTOP)
{
if(RSI0<50&&RSI1>50)
OrderDelete(OrderTicket());
else
b++;
}
if (OrderType()==OP_SELLSTOP)
{
if(RSI0>50&&RSI1<50)
OrderDelete(OrderTicket());
else
s++;
}
}
}
double SL,TP; // < !!!!!!!!! эти переменные не используются, можно удалить
//---- buy stop
if(RSI0>50&&RSI1<50 && p<1 && b<1) // < !!!!!!!!!
{
res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
}
//---- sell stop
if(RSI0<50&&RSI1>50 && p<1 && s<1) // < !!!!!!!!!
{
res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red);
}
//----
return(0);
}
この辺は皮肉が好きなんですよ(笑)。トリシキンはそれを見て怒ったんだ コードで助けると言ったんだ
その方がシンプルでいいですよね。
{
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==Type)
OrderDelete(OrderTicket());
}
}
}
void OnTick()関数の外側のどこかにあります。
if (сигнал_sell)OrderDelete_(OP_BUYSTOP);
そして、これはvoid OnTick()関数 本体の中です。
そして、これは void OnTick()関数 本体の中にあります。
なるほど。
できることは、なんとなく終わらせた。描写はできている。目的は、なぜ思い通りに動かないのかを理解するためです。
if()ブロックの中にelseが あります。本当にこのような意図があったのでしょうか?
さらにCounts()関数は、初期化されていないグローバル変数 countを受け入れ、さらに、関数内部でもう一度定義されます。
Counts()関数は注文をカウントしますが、メイン関数内で何度か変更されるあるチケットと比較します。ただし、ファンクション操作中のチケットの値は同じです。では、この関数はいくつのオーダーを計算するのでしょうか。複数あるのでしょうか?
この形式では、この関数は引数を必要とせず、ただ呼び出して結果を返すだけである。
次のページ関数FindLastOType()は、再びチケットとの比較になります。有効なチケットと比較して保証できるのか?必要なマジックナンバーとシンボルを持つ最初の注文が見つかった時点でループを中断し、注文の種類を返す方がシンプルではないでしょうか?
FindLastOrderOpenPrice()、FindLastLot()と同じです。
ModifyOrders()関数は、悪夢を見ずに眠るために長い間調べないほど、私をぞっとさせた...。
コードに修正を加えてください
使ってみてください ^_~。
extern double TakeProfit = 150; //Тейкпрофит ордера
extern double TrailingStop = 100; // трал
extern int Delta = 100; //Расстояние от цены для установки ордера
extern double LOT = 0.1; //Объём позиции
extern int Magic =2;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
int res = 0;
//ИНДИКАТОР RSI
double RSI0=iRSI(NULL,0,5,PRICE_CLOSE,0);
double RSI1=iRSI(NULL,0,5,PRICE_CLOSE,1);
double BuyPrice=Ask+Delta*Point;
double SellPrice=Bid-Delta*Point;
//---- buy stop
if(RSI0>50&&RSI1<50 && Number(OP_BUYSTOP)<0 && Number(OP_BUY)<1) // < !!!!!!!!!
{
res=OrderSend(Symbol(),OP_BUYSTOP,LOT,BuyPrice,0,BuyPrice-StopLoss*Point,BuyPrice+TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_SELLSTOP,Blue);
}
//---- sell stop
if(RSI0<50&&RSI1>50 && Number(OP_SELLSTOP)<0 && Number(OP_SELL)<1) // < !!!!!!!!!
{
res=OrderSend(Symbol(),OP_SELLSTOP,LOT,SellPrice,0,SellPrice+StopLoss*Point,SellPrice-TakeProfit*Point,"ОТЛОЖКИ",Magic,OP_BUYSTOP,Red);
}
//----
if (RSI0>50&&RSI1<50) OrderDelete_(OP_SELLSTOP);
if (RSI0<50&&RSI1>50)OrderDelete_(OP_BUYSTOP);
}
//+------------------------------------------------------------------+
void OrderDelete_(int Type)
{
bool r;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==Type)
r = OrderDelete(OrderTicket());
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Number(int Type)
{
int kp=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic) continue;
if(OrderType()==Type)
kp++;
}
}
return(kp);
}
//+------------------------------------------------------------------+
if()ブロックの中にelseが あります。本当にそういうことだったのだろうか。
さらにCounts()関数は、初期化されていないグローバル変数 countを受け取りますが、この変数も関数自体の中でもう一度宣言されます。
Counts()関数は注文をカウントしますが、メイン関数内で数回変化するあるチケットと比較します。ただし、ファンクション操作中のチケットの値は同じです。では、この関数はいくつのオーダーを計算するのでしょうか。複数あるのでしょうか?
この形式では、この関数は引数を必要とせず、ただ呼び出して結果を返すだけである。
次のページ関数FindLastOType()は、再びチケットとの比較になります。有効なチケットと比較して保証できるのか?必要なマジックナンバーとシンボルを持つ最初の注文が見つかった時点でループを中断し、注文の種類を返す方がシンプルではないでしょうか?
FindLastOrderOpenPrice()、FindLastLot()と同じです。
Function ModifyOrders()が怖くて、夜中に悪夢を見ないように、ずっと調べないようにしていたのですが...。
訂正
それ以外の場所に置くと、間違ったパラメータになってしまうからです
最新の情報を考慮する必要があります。
変えてみる。
標準のOrderModify()を使ってみたが、大量の注文を同時に動かすと禁止され、常に
講評をありがとうございました。
はい、ブラケットの誤植です。それ以外の質問は有効です。
bool condition;
if(condition) {}
と同じ
if(condition==true) {}
и
if(!condition) {}
イコール
if(condition==false) {}
ただ、より短く、より身近になっただけです。