MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1657

 
artem artem # :
Bir şey net değilse bir ekran görüntüsü ekledim - sadece sorun

Bu nasıl çalışması gerekir

 #define MagicNumber   122122
extern string s1             = "Trading options" ;
extern double Lot            = 0.01 ;     // размер лота 0 - авт.расчет
extern double StopLoss       = 40 ;     // стоплосс
extern double TakeProfit     = 10 ;     // тейкпрофит
extern double TrailStop      = 21 ;     // уровень без убытка
extern int     Trailing       = 0 ;       // трейлинг стоп 1 вкл. 0 выкл.
extern int     Breakeven      = 0 ;       // перенос стоп лосса в без убыток
extern string s2             = "Day & Hour" ;
extern int     HrStart        = 0 ;       // время начала торговли
extern int     HrEnd          = 23 ;     // время окончания торговли
extern int     Monday         = 1 ;       // Понедельник 1 вкд. 0 выкл.
extern int     Tuesday        = 1 ;       // Вторник
extern int     Wednesday      = 1 ;       // Среда
extern int     Thursday       = 1 ;       // Четверг
extern int     Friday         = 1 ;       // Пятница
//+------------------------------------------------------------------+
// параметры индикаторов
double MovingPeriodLw        = 5 ;      
double MovingPeriodS1        = 75 ;
double MovingPeriodS2        = 85 ;
double StopLevel;
double TrailStep             = 3 ;       // шаг трейлинг стопа
bool OrderBuy = true , OrderSell = true , Order = false , Init = true ;
int timeprev = 0 , Slip = 3.0 ;

//+------------------------------------------------------------------+
//| Init function                                                    |
//+------------------------------------------------------------------+
void OnInit ()
{
   if ( Digits == 3 || Digits == 5 ) { // Пересчет для 5-ти знаков                                                    
      TakeProfit *= 10 ;
      TrailStop *= 10 ;
      TrailStep *= 10 ;
      StopLoss *= 10 ;
      Slip *= 10 ;
   } 
   return ; 
}
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
{
   StopLevel = MarketInfo( Symbol (), MODE_STOPLEVEL); 
   CheckForOpen();
   // Определение направления пересечения мувингов
   if (Init) InitMetod(); 
   
   // Трейлинг стоп открытых позиций
   if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
   
   // Ожидание нового бара на графике
   if (timeprev == Time[ 0 ]) return ;
   timeprev = Time[ 0 ];
   
   // Открытие ордера по методу Пуриа
   if (CheckForOpen()== 0 && OrderBuy== true ) // Если сигнал для покупок 
     {
       if ( OrderSend ( Symbol (),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss* Point ,Ask+TakeProfit* Point , "" ,MagicNumber, 0 ,Blue))
        {OrderBuy= false ; Print ( "BUY OK" );}
     } 
   if (CheckForOpen()== 1 && OrderSell== true ) // Если сигнал для продаж 
     {
       if ( OrderSend ( Symbol (),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss* Point ,Bid-TakeProfit* Point , "" ,MagicNumber, 0 ,Red))
        {OrderSell= false ; Print ( "SELL OK" );}
     }
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
int CheckForOpen() // Открытие ордера по методу Пуриа
  {
   double malw,mas1,mas2,macd;
   int     res=- 1 , buy= 0 , sell= 0 ;
   // Считывание параметров индикаторов 3 свечи (4ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 3 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 3 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 3 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 3 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 2 свечи (3ей)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 2 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 2 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 2 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 2 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 1 свечи (2ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 1 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 1 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 1 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 1 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 0 свечи (1ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 0 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 0 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 0 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   
   if (buy == 4 ) { res= 0 ; OrderSell= true ;} 
   if (sell== 4 ) { res= 1 ; OrderBuy = true ;}
   return (res);
  }
 
artem artem # :
Bir şey net değilse bir ekran görüntüsü ekledim - sadece sorun

Müdahale etmemek için derleyin

 if (Init) InitMetod(); 
 
SanAlex # :

ve bunu bir deneyin - oralarda açılacak mı?

Bu şekilde açılıyor - ama nasıl açmalı?

EURUSDH1

 
SanAlex # :

Bu şekilde açılıyor - ama nasıl açmalı?



 
MakarFX # :

bunun gibi açılır - daha derine indiğimde

EURUSDH1 2

ve bunun gibi - yukarıdaki gibi kod sizin tarafınızdan gösterilir

EURUSDH1 3

 
MakarFX , baktım hem alıma hem satıma açılıyor onda her şey yolunda. Ancak, hızlı olan aynı kalırken, MACD geçişine ters yönde hala bir tepki yok. Sonuç olarak, MACD hızlı bölgeye dönerse ve 4 onay mumunu geçerse, siparişe giriş yapılmaz. Bu mesaja bir ekran görüntüsü ekledim, böylece ne demek istediğimi görsel olarak netleştirebileceksiniz.
Dosyalar:
 
artem artem # :
Bir şey net değilse bir ekran görüntüsü ekledim - sadece sorun

biraz ayarlandı

 #define MagicNumber   122122
extern string s1             = "Trading options" ;
extern double Lot            = 0.01 ;     // размер лота 0 - авт.расчет
extern double StopLoss       = 40 ;     // стоплосс
extern double TakeProfit     = 10 ;     // тейкпрофит
extern double TrailStop      = 21 ;     // уровень без убытка
extern int     Trailing       = 0 ;       // трейлинг стоп 1 вкл. 0 выкл.
extern int     Breakeven      = 0 ;       // перенос стоп лосса в без убыток
extern string s2             = "Day & Hour" ;
extern int     HrStart        = 0 ;       // время начала торговли
extern int     HrEnd          = 23 ;     // время окончания торговли
extern int     Monday         = 1 ;       // Понедельник 1 вкд. 0 выкл.
extern int     Tuesday        = 1 ;       // Вторник
extern int     Wednesday      = 1 ;       // Среда
extern int     Thursday       = 1 ;       // Четверг
extern int     Friday         = 1 ;       // Пятница
//+------------------------------------------------------------------+
// параметры индикаторов
double MovingPeriodLw        = 5 ;      
double MovingPeriodS1        = 75 ;
double MovingPeriodS2        = 85 ;
double StopLevel;
double TrailStep             = 3 ;       // шаг трейлинг стопа
bool OrderBuy = true , OrderSell = true , Order = false , Init = true ;
int timeprev = 0 , Slip = 3.0 ;

//+------------------------------------------------------------------+
//| Init function                                                    |
//+------------------------------------------------------------------+
void OnInit ()
{
   if ( Digits == 3 || Digits == 5 ) { // Пересчет для 5-ти знаков                                                    
      TakeProfit *= 10 ;
      TrailStop *= 10 ;
      TrailStep *= 10 ;
      StopLoss *= 10 ;
      Slip *= 10 ;
   } 
   return ; 
}
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
{
   StopLevel = MarketInfo( Symbol (), MODE_STOPLEVEL); 
   CheckForOpen();
   // Определение направления пересечения мувингов
//   if (Init) InitMetod(); 
   
   // Трейлинг стоп открытых позиций
   if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
   
   // Ожидание нового бара на графике
   if (timeprev == Time[ 0 ]) return ;
   timeprev = Time[ 0 ];
   
   // Открытие ордера по методу Пуриа
   if (CheckForOpen()== 0 && OrderBuy== true ) // Если сигнал для покупок 
     {
       if ( OrderSend ( Symbol (),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss* Point ,Ask+TakeProfit* Point , "" ,MagicNumber, 0 ,Blue))
        {OrderBuy= false ; Print ( "BUY OK" );}
     } 
   if (CheckForOpen()== 1 && OrderSell== true ) // Если сигнал для продаж 
     {
       if ( OrderSend ( Symbol (),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss* Point ,Bid-TakeProfit* Point , "" ,MagicNumber, 0 ,Red))
        {OrderSell= false ; Print ( "SELL OK" );}
     }
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
int CheckForOpen() // Открытие ордера по методу Пуриа
  {
   double malw,mas1,mas2,macd;
   int     res=- 1 , buy= 0 , sell= 0 ;
   // Считывание параметров индикаторов 3 свечи (4ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 3 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 3 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 3 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 3 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 2 свечи (3ей)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 2 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 2 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 2 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 2 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 1 свечи (2ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 1 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 1 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 1 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 1 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   // Считывание параметров индикаторов 0 свечи (1ой)
   malw= iMA ( NULL , 0 ,MovingPeriodLw, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   mas1= iMA ( NULL , 0 ,MovingPeriodS1, 0 , MODE_LWMA , PRICE_LOW , 0 );
   mas2= iMA ( NULL , 0 ,MovingPeriodS2, 0 , MODE_LWMA , PRICE_LOW , 0 );
   macd= iMACD ( NULL , 0 , 15 , 26 , 1 , PRICE_CLOSE ,MODE_MAIN, 0 );
   if (malw>mas1&&malw>mas2&&macd> 0 ) {buy+= 1 ; sell= 0 ;}
   if (malw<mas1&&malw<mas2&&macd< 0 ) {buy= 0 ; sell+= 1 ;}
   
   if (buy < 4 )  OrderBuy= true ; 
   if (sell< 4 )  OrderSell= true ;
   if (buy == 4 ) { res= 0 ; OrderSell= true ;} 
   if (sell== 4 ) { res= 1 ; OrderBuy = true ;}
   return (res);
  }
 
artem artem # :

ve resimdeki gibi - doğru noktalar ???

EURUSDH1 4

 

MakarFX , son editinizde sonuç olarak hızlı olan yavaş mumları geçerse 1. mumdan emir açılır ve ardından MACD ile aynı bölgeye geri döner. Ve lojna 4 kez teyit edilecek ve sipariş 4. mumda açılmalıdır. Dosyayı daha kolay anlaşılması için ekledim.


SanAlex , MACD çubuklarını ve hızlı olanın yavaş olanı nasıl geçtiğini net bir şekilde görebilmeniz için yakınlaştırabilir misiniz? Ve zar zor görebiliyorum

Dosyalar:
 
artem artem MACD ile aynı bölgeye geri döner. Ve lojna 4 kez teyit edilecek ve sipariş 4. mumda açılmalıdır. Dosyayı daha kolay anlaşılması için ekledim.


SanAlex , MACD çubuklarını ve hızlı olanın yavaş olanı nasıl geçtiğini net bir şekilde görebilmeniz için yakınlaştırabilir misiniz? Ve zar zor görebiliyorum

Hızlı olan yavaşları geçtiğinde bool'un değiştiği ve bir sonraki çubukta sinyalin o andaki durumu yeniden hesapladığı ve bir anlaşma açtığı ortaya çıktı.

Sorunu anlıyorum ama nasıl çözeceğimi bilmiyorum...