MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 63
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Mevcut bir çubuğu kontrol ediyorsunuz double rsi = iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
Fiyat yükselir, 70 seviyesini geçer ve ticarete giriş olur. Çubuk kapandığında, zaten RSI'nin daha düşük olduğunu görüyorsunuz, ancak bundan önce daha yüksekti ve ardından seviyenin altına geri döndü.
Kapalı bir çubuğu kontrol edin, o zaman bu olmayacak ve girişler onaylanmış bir sinyalde olacaktır:
çift rsi = iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 2 );
Şu şekilde yazılmış: (muhtemelen yanlış)
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 ());
}
}
//+------------------------------------------------------------------+
Sonuç şudur: Kavşak olmadığında siparişler açılır...
Şu şekilde yazılmış: (muhtemelen yanlış)
}
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;
Sonuç şudur: Kavşak olmadığında siparişler açılır...
Geçerli çubuğa neden ihtiyacınız var double rsi = iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 ); ???
Yeniden yazılan kodunuz öncekiyle tamamen aynı koşulu yerine getiriyor, sıfır barda fiyat seviyeyi geçti ve bir anlaşma açıldı, daha sonra fiyat geri döndü ve RSI seviyenin altına döndü, sonuç olarak bar kapandıktan sonra, artık sinyal yok.
Hesaplamada sıfır çubuğunu kullanmayın.
Geçerli çubuğa neden ihtiyacınız var double rsi = iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 ); ???
Yeniden yazılan kodunuz öncekiyle tamamen aynı koşulu yerine getiriyor, sıfır barda fiyat seviyeyi geçti ve bir anlaşma açıldı, daha sonra fiyat geri döndü ve RSI seviyenin altına döndü, sonuç olarak bar kapandıktan sonra, artık sinyal yok.
Hesaplamada sıfır çubuğunu kullanmayın.
Söyle neden hata veriyor?
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);
}
//+------------------------------------------------------------------+
Söyle neden hata veriyor?
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);
}
//+------------------------------------------------------------------+
Söyle neden hata veriyor?
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);
}
//+------------------------------------------------------------------+
ekstra ";"
{
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);
}
Ve böylece bu durumda daha iyi olacak:
bu arada burada
ekstra ";"
{
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);
}
Ve böylece bu durumda daha iyi olacak:
herkese merhaba, bir ifade nasıl yazılır
beşinci parti, lot 1 ve 4 siparişlerinin toplamına eşittir
ilkini veya sonunu bilet tanımından bulabilirsiniz
ve mevcut şebekedeki sabit değişiklik göz önüne alındığında herhangi bir ara madde nasıl bulunur?
her siparişin bir şekilde ve bir yerde saklanması gerektiği anlamına gelir
peki fark var mı?
arasında
{
if uslovie1== true {...}
if uslovie2== true {...}
if uslovie3== true {...}
}
И
void OnTick ()
{
{
if uslovie1== true
{...}
else if {...}
else if {...}
}
}