MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 63 1...565758596061626364656667686970...1953 新しいコメント 削除済み 2017.01.09 10:04 #621 Vitaly Muzichenko:既存のバーでチェックしますdouble rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);価格が上昇し、レベル70のクロスオーバーがあり、取引に参入する。バーを閉じるという事実で、あなたはすでにRSIが低くなっていることがわかりますが、その前にそれは高く、その後、レベルの下に戻ってきました。閉じたバーでチェックすれば、このようなことは起こらず、確定したシグナルでエントリーすることができます。double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2); なるほど。ありがとうございます。 削除済み 2017.01.09 10:44 #622 こんな風に書きました。(たぶん間違い)。double tp,sl,OrderBuy=0,OrderSell=0;double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;int tiket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { OrderBuy=0; OrderSell=0; for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер { if(OrderType()==OP_BUY) { OrderBuy++; //Кол. покупок } if(OrderType()==OP_SELL) { OrderSell++; //Кол. продаж } } } double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1); double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);//+------------------------------------------------------------------+ double StopLossLevel; double TakeProfitLevel; if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0; if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0; tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits); tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits); slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);///--- if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70 && rsi2<Urov_70) { tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue); if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30 && rsi2>Urov_30) { tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed); if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } }//+------------------------------------------------------------------+結果:クロスオーバーが発生しないのに注文が入る・・・。 Any questions from newcomers 初心者の方からの質問 MQL4 MT4 MetaTrader エラー、バグ、質問 Vitaly Muzichenko 2017.01.09 10:51 #623 Ibragim Dzhanaev:こんな風に書きました。(たぶん間違い)。 } } double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1); double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);//+------------------------------------------------------------------+ double StopLossLevel;結果は次のようになります。クロスオーバーがないときに注文を開始...なぜ現在のバーが必要なのかdouble rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); ?・・・?あなたの書き直したコードは、以前と全く同じ条件を満たします。ゼロバーで価格がレベルを超え、取引が行われ、その後価格が戻り、RSIがレベルの下に戻り、その結果、バーを閉じた後にシグナルはありません。計算にはゼロバーを使用しないでください。 削除済み 2017.01.09 11:12 #624 Vitaly Muzichenko:なぜ現在のバーが必要なのかdouble rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); ?・・・?あなたの書き直したコードは、以前と全く同じ条件です。ゼロバーで価格がレベルを超えて取引が行われ、その後価格が戻り、RSIがレベルの下に戻り、その結果、バーを閉じた後、シグナルがありません。計算にはゼロバーを使用しないでください。 効くんです。ありがとうございます。 削除済み 2017.01.09 12:33 #625 なぜエラーが発生するのか、教えてください。double tp,sl,OrderBuy=0,OrderSell=0;double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;int tiket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { OrderBuy=0; OrderSell=0; for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер { if(OrderType()==OP_BUY) { OrderBuy++; //Кол. покупок } if(OrderType()==OP_SELL) { OrderSell++; //Кол. продаж } } }//double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1); double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);//+------------------------------------------------------------------+ double StopLossLevel; double TakeProfitLevel; if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0; if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0; tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits); tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits); slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);///--- if(CountBuy()+CountSell()==0 && rsi1>Urov_70 && rsi2<Urov_70) { tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue); if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } if(CountBuy()+CountSell()==0 && rsi1<Urov_30 && rsi2>Urov_30) { tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed); if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } }//+------------------------------------------------------------------+int CountBuy() { int count=0; for(int trade=OrdersTotal()-1; trade>0; trade--); { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY) count++; } } return(count); }//+------------------------------------------------------------------+int CountSell() { int count=0; for(int trade=OrdersTotal()-1; trade>0; trade--); { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL) count++; } } return(count); }//+------------------------------------------------------------------+ Any questions from newcomers 初心者の方からの質問 MQL4 MT4 MetaTrader エラー、バグ、質問 Sergey Gritsay 2017.01.09 12:40 #626 Ibragim Dzhanaev:なぜエラーが発生するのか、教えてください。double tp,sl,OrderBuy=0,OrderSell=0;double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;int tiket;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { OrderBuy=0; OrderSell=0; for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер { if(OrderType()==OP_BUY) { OrderBuy++; //Кол. покупок } if(OrderType()==OP_SELL) { OrderSell++; //Кол. продаж } } }//double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1); double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);//+------------------------------------------------------------------+ double StopLossLevel; double TakeProfitLevel; if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0; if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0; tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits); slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits); tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits); slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);///--- if(CountBuy()+CountSell()==0 && rsi1>Urov_70 && rsi2<Urov_70) { tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue); if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } if(CountBuy()+CountSell()==0 && rsi1<Urov_30 && rsi2>Urov_30) { tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed); if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError()); } }//+------------------------------------------------------------------+int CountBuy() { int count=0; for(int trade=OrdersTotal()-1; trade>0; trade--); { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY) count++; } } return(count); }//+------------------------------------------------------------------+int CountSell() { int count=0; for(int trade=OrdersTotal()-1; trade>0; trade--); { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL) count++; } } return(count); }//+------------------------------------------------------------------+ ちなみに。 for(int trade=OrdersTotal()-1; trade>0; trade--); 斯くやあらん for(int trade=OrdersTotal()-1; trade>=0; trade--); じゃないとラストオーダーに間に合わない Vitaly Muzichenko 2017.01.09 12:50 #627 Ibragim Dzhanaev:エラーが表示される原因を教えてください。 for(int trade=OrdersTotal()-1; trade>0; trade--); { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL) count++; } } return(count); }//+------------------------------------------------------------------+余分な " ; "int CountBuy() { int count=0; for(int trade=OrdersTotal()-1; trade>0; trade--); <<< { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY) count++; } } return(count); }//+------------------------------------------------------------------+int CountSell() { int count=0; for(int trade=OrdersTotal()-1; trade>0; trade--); <<< { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL) count++; } } return(count); } その方がいいんですよ、この場合。for(int trade=0; trade<OrdersTotal(); trade++) 削除済み 2017.01.09 13:03 #628 Sergey Gritsay: ちなみに。 for(int trade=OrdersTotal()-1; trade>0; trade--); 弭 for(int trade=OrdersTotal()-1; trade>=0; trade--); でないとラストオーダーを逃すことになる。 ありがとうございます。 削除済み 2017.01.09 13:04 #629 Vitaly Muzichenko:余分な " ; "int CountBuy() { int count=0; for(int trade=OrdersTotal()-1; trade>0; trade--); <<< { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY) count++; } } return(count); }//+------------------------------------------------------------------+int CountSell() { int count=0; for(int trade=OrdersTotal()-1; trade>0; trade--); <<< { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL) count++; } } return(count); } その方がいいんですよ、この場合。for(int trade=0; trade<OrdersTotal(); trade++) ありがとうございます。 Mickey Moose 2017.01.10 22:29 #630 みなさん、こんにちは!式はどのように書けばいいのでしょうか?第5の土地は、第1の土地と第4の土地の合計と同じである。というチケットの定義があります。しかし、現在のグリッドが常に変化していることを考えると、どのようにして中間的なものを見つけるのでしょうか?つまり、すべての注文はどこかに保存されるか、他の方法で保存されるはずです。と違いがあるのでしょうか?間void OnTick() { if uslovie1==true {...} if uslovie2==true {...} if uslovie3==true {...} } Иvoid OnTick() { { if uslovie1==true {...} else if {...} else if {...} } } 1...565758596061626364656667686970...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
既存のバーでチェックしますdouble rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
価格が上昇し、レベル70のクロスオーバーがあり、取引に参入する。バーを閉じるという事実で、あなたはすでにRSIが低くなっていることがわかりますが、その前にそれは高く、その後、レベルの下に戻ってきました。
閉じたバーでチェックすれば、このようなことは起こらず、確定したシグナルでエントリーすることができます。
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
こんな風に書きました。(たぶん間違い)。
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
OrderBuy=0; OrderSell=0;
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(OrderBuy==0 && rsi>Urov_70 && rsi1<Urov_70 && rsi2<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(OrderSell==0 && rsi<Urov_30 && rsi1>Urov_30 && rsi2>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
結果:クロスオーバーが発生しないのに注文が入る・・・。
こんな風に書きました。(たぶん間違い)。
}
double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
//+------------------------------------------------------------------+
double StopLossLevel;
結果は次のようになります。クロスオーバーがないときに注文を開始...
なぜ現在のバーが必要なのかdouble rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); ?・・・?
あなたの書き直したコードは、以前と全く同じ条件を満たします。ゼロバーで価格がレベルを超え、取引が行われ、その後価格が戻り、RSIがレベルの下に戻り、その結果、バーを閉じた後にシグナルはありません。
計算にはゼロバーを使用しないでください。
なぜ現在のバーが必要なのかdouble rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0); ?・・・?
あなたの書き直したコードは、以前と全く同じ条件です。ゼロバーで価格がレベルを超えて取引が行われ、その後価格が戻り、RSIがレベルの下に戻り、その結果、バーを閉じた後、シグナルがありません。
計算にはゼロバーを使用しないでください。
なぜエラーが発生するのか、教えてください。
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
OrderBuy=0; OrderSell=0;
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
//double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(CountBuy()+CountSell()==0 && rsi1>Urov_70 && rsi2<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(CountBuy()+CountSell()==0 && rsi1<Urov_30 && rsi2>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
なぜエラーが発生するのか、教えてください。
double slSell,slBuy,tpSell,tpBuy,TotalBiu,TotalSell;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
OrderBuy=0; OrderSell=0;
for(int i=OrdersTotal()-1; i>=0; i--) //Цикл по всем ордерам
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) //Выбрали ордер
{
if(OrderType()==OP_BUY)
{
OrderBuy++; //Кол. покупок
}
if(OrderType()==OP_SELL)
{
OrderSell++; //Кол. продаж
}
}
}
//double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
double rsi2=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,2);
//+------------------------------------------------------------------+
double StopLossLevel;
double TakeProfitLevel;
if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
if(CountBuy()+CountSell()==0 && rsi1>Urov_70 && rsi2<Urov_70)
{
tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,slBuy,tpBuy,NULL,MagicNumber,0,clrBlue);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
if(CountBuy()+CountSell()==0 && rsi1<Urov_30 && rsi2>Urov_30)
{
tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,slSell,tpSell,NULL,MagicNumber,0,clrRed);
if(tiket<0)Print("Ошибка открытия ордера № - ",GetLastError());
}
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
エラーが表示される原因を教えてください。
for(int trade=OrdersTotal()-1; trade>0; trade--);
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
余分な " ; "
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--); <<<
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--); <<<
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
その方がいいんですよ、この場合。
ちなみに。
余分な " ; "
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--); <<<
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count=0;
for(int trade=OrdersTotal()-1; trade>0; trade--); <<<
{
if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber && OrderType()==OP_SELL)
count++;
}
}
return(count);
}
その方がいいんですよ、この場合。
みなさん、こんにちは!式はどのように書けばいいのでしょうか?
第5の土地は、第1の土地と第4の土地の合計と同じである。
というチケットの定義があります。
しかし、現在のグリッドが常に変化していることを考えると、どのようにして中間的なものを見つけるのでしょうか?
つまり、すべての注文はどこかに保存されるか、他の方法で保存されるはずです。
と違いがあるのでしょうか?
間
{
if uslovie1==true {...}
if uslovie2==true {...}
if uslovie3==true {...}
}
И
void OnTick()
{
{
if uslovie1==true
{...}
else if {...}
else if {...}
}
}