Dax/Nasdaq Daytrading

Miejsce, gdzie każdy może prowadzić swój własny dziennik gry na FX.
Tomasz196407
Fanatyk
Fanatyk
Posty: 14967
Rejestracja: 29 paź 2012, 09:52

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: Tomasz196407 »

Niech ci bedzie i bełkot i niezrozumiałość
wszystkiego dobrego

KOndycjo :D

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: Mistyfikator »

Nie wiem, czy tak wolno. Ale wrzucę kod, tak będzie najlepiej.
Wystarczy skopiować, wkleić do Metatrader, skompilować i wrzucić do MT4.
Ja obecnie nie mam czasu przetestować.

Skoro takich kodów są w sieci tysiące, to też dorzucę swoją cegiełkę dla dobra ogółu.
Tym bardziej, że podobnych jeszcze trochę napiszę pewnie, zanim się zajmę czymś innym w programowaniu.

EA jeszcze nic specjalnego nie robi, poza obliczeniem CMO i RSI.
Jest możliwość ustawienia SL i TP w punktach.
Można ustawić tak, żeby zawierał transakcje, można tylko na alerty.
Na razie brak opcji prowadzenia pozycji na podstawie wskaźników.

Wszystko podlega modyfikacji rzecz jasna:
Wprowadzenie dodatkowego wskaźnika, dodatkowych opcji.

Zastrzegam, że błędy są tutaj możliwe.
Szczególnie do przetestowania wskaźnik CMO.
Z góry przepraszam wszystkich zainteresowanych, że nie stworzyłem osobnej funkcji dla wskaźnika, tylko zmienną :

Kod: Zaznacz cały


//+------------------------------------------------------------------+
//|                                                   CMO_EXPERT.mq4 |
//|                                                           MSTFKR |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "MSTFKR"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot_Size = 0.1;
extern int Orders_Total_Limit = 1;
extern int Stop_Loss_Points_Value = 800;
extern int Take_Profit_Value = 1300;

extern ENUM_TIMEFRAMES CMO_TF = PERIOD_M5;
extern int CMO_no_of_Periods = 8;

extern ENUM_TIMEFRAMES RSI_TF = PERIOD_M5;
extern int RSI_no_of_Periods = 8;

extern ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE;
extern int RSI_Shift = 1;

extern double CMO_Buy_Level = -50;
extern double CMO_Sell_Level = 50;

extern double RSI_Buy_Level = 30;
extern double RSI_Sell_Level = 70;

extern bool Order_Send_Enable = false;





//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
 bool IsNewBar   (string          f_symbol,        // instrument finansowy
                  ENUM_TIMEFRAMES f_timeFrame,     // przedział czasowy
                  bool            f_current=false) // bieżąca świeca
               
               {
//---
                 static datetime f_lastBar=0;
                 datetime f_bar=iTime(f_symbol,f_timeFrame,0);
//---
                 if(f_current==false && f_lastBar==0)
                 {
                  f_lastBar=f_bar; return false;
                 }
//---
                    if(f_lastBar!=f_bar)
                   {
                    f_lastBar=f_bar; return true;
                   }
                    else return false;
                   }
void OnTick()

  {   
                                 
                        
      bool L = false;
      bool S = false;

//----- CMO Variables :
      double Sum_of_Closed_Higher = 0;
      double Sum_of_Closed_Lower = 0;
      double Close_Calculated_Now = 0;
      double Open_Calculated_Now = 0;
      double Sum_of_Closed_Higher_Nm = 0;
      double Sum_of_Closed_Lower_Nm = 0;
//---
// CMO_Calculation :
      if ( IsNewBar ( NULL, CMO_TF) == true )
            {     
            for( int i = 1; i <=  CMO_no_of_Periods ; i ++ )                               
            {Close_Calculated_Now = iClose ( NULL, CMO_TF, i );
             Open_Calculated_Now = iOpen ( NULL, CMO_TF, i );
               if ( Close_Calculated_Now >= Open_Calculated_Now )
                  { Sum_of_Closed_Higher = Sum_of_Closed_Higher + Close_Calculated_Now; }                    
               else
                   Sum_of_Closed_Lower = Sum_of_Closed_Lower + Close_Calculated_Now;
                  
            } 
                        Sum_of_Closed_Higher_Nm = NormalizeDouble ( Sum_of_Closed_Higher, _Digits );
                        Sum_of_Closed_Lower_Nm = NormalizeDouble ( Sum_of_Closed_Lower, _Digits ); 
                        Print( "Sum_of_Closed_Higher ", Sum_of_Closed_Higher_Nm ); Print( "Sum_Of_Closed_Lower ",Sum_of_Closed_Lower_Nm );
                        double CMO = ( ( Sum_of_Closed_Higher - Sum_of_Closed_Lower ) / ( Sum_of_Closed_Higher + Sum_of_Closed_Lower ) ) * 100 ;                       
                        Print ( "CMO Value, ",CMO_no_of_Periods," bars, TF: ",CMO_TF," is ",CMO ); 
 
 //********************RSI CALCULATION*******************
                        
                        double RSI = iRSI(NULL,RSI_TF,RSI_no_of_Periods,RSI_Applied_Price,RSI_Shift );
                        double RSI_Normal = NormalizeDouble(RSI,_Digits);
                        
                        Print ( "RSI Value = ",RSI_Normal);
 
                        
                        if ( ( OrdersTotal() < Orders_Total_Limit ) && ( IsNewBar(NULL,CMO_TF) == true ) && ( RSI_Normal >= RSI_Buy_Level ) && ( CMO <= CMO_Buy_Level ) )
                        
                        { L = true; }
            
                        
                        if ( ( OrdersTotal() < Orders_Total_Limit ) && ( IsNewBar(NULL,CMO_TF) == true ) && ( RSI_Normal <= RSI_Sell_Level ) && ( CMO >= CMO_Sell_Lewel ) )
                        
                        { S = true; }
                        
                        
                        if(L==true)
                        
                        {
                        Alert("Conditions for BUY have been met, CMO is ",CMO,". RSI is ",RSI_Normal);
                        
                        if(Order_Send_Enable==true)
                           {
                                 double SL = Ask - (Stop_Loss_Points_Value*_Point);
                                 double SL_Normal = NormalizeDouble(SL,_Digits);
                                 double TP = Ask + (Take_Profit_Value*_Point);
                                 double TP_Normal = NormalizeDouble(TP,_Digits);
                        
                                 if(OrderSend(NULL,OP_BUY,Lot_Size,Ask,0,SL_Normal,TP_Normal,NULL,0,0,clrNONE))
                  
                                 Print("L failed ",GetLastError());
                                 else
                                 Print("L: ",Ask);
                           }
                       }      
                       
                       
                          if(S==true)
                        
                        {
                        Alert("Conditions for SELL have been met, CMO is ",CMO,". RSI is ",RSI_Normal);
                        
                        if(Order_Send_Enable==true)
                           {
                                 double SL = Bid + (Stop_Loss_Points_Value*_Point);
                                 double SL_Normal = NormalizeDouble(SL,_Digits);
                                 double TP = Bid - (Take_Profit_Value*_Point);
                                 double TP_Normal = NormalizeDouble(TP,_Digits);
                        
                                 if(OrderSend(NULL,OP_SELL,Lot_Size,Bid,0,SL_Normal,TP_Normal,NULL,0,0,clrNONE))
                  
                                 Print("S failed ",GetLastError());
                                 else
                                 Print("S: ",Bid);
                           }
                       }             
            }
         
  }
//+------------------------------------------------------------------+


Jestem otwarty na wszelkie opinie.
Zasadniczo jestem ciekaw, czy coś pokręciłem w kodowaniu, czy w parametrach.
Albo w ustawieniach backtestów w ogóle.
Ostatnio zmieniony 21 lip 2022, 23:22 przez Mistyfikator, łącznie zmieniany 1 raz.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: ninjaproject »

A czemu ty wklejasz kod, a nie, po prostu, załączasz pliku mq4 w załącznikach?
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
21 lip 2022, 23:13
A czemu ty wklejasz kod, a nie, po prostu, załączasz pliku mq4 w załącznikach?
mql4 nie da rady

Jak to zrobić, skompresować ?

Zresztą, żeby do uruchomić serio wystarczy skopiować, wkleić, skompilować i przenieść do MT4

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: ninjaproject »

Kod będzie działać, ale masz:
extern double CMO_Sell_Lewel = 50;

Lewel zamiast Level - bo w innych pozycjach masz Level
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: ninjaproject »

Mistyfikator pisze:
21 lip 2022, 23:18
ninjaproject pisze:
21 lip 2022, 23:13
A czemu ty wklejasz kod, a nie, po prostu, załączasz pliku mq4 w załącznikach?
mql4 nie da rady

Jak to zrobić, skompresować ?

Zresztą, żeby do uruchomić serio wystarczy skopiować, wkleić, skompilować i przenieść do MT4
Ty wiesz, ja wiem, ale większość nie ma pojęcia.

Jak nie da rady?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: Mistyfikator »

ninjaproject pisze:
21 lip 2022, 23:21
Kod będzie działać, ale masz:
extern double CMO_Sell_Lewel = 50;

Lewel zamiast Level - bo w innych pozycjach masz Level
Dzięki, już poprawiłem

Może to dlatego nic mi nie otworzyło w backtestach.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: Mistyfikator »

Oki, kiedyś dojdę jak się to wysyła, o ile taka wiedza będzie potrzebna.

Nie dawało rady, to wkleiłem kod.

Takie rozwiązanie też ma swoje zalety

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: ninjaproject »

Mistyfikator pisze:
21 lip 2022, 23:23
ninjaproject pisze:
21 lip 2022, 23:21
Kod będzie działać, ale masz:
extern double CMO_Sell_Lewel = 50;

Lewel zamiast Level - bo w innych pozycjach masz Level
Dzięki, już poprawiłem

Może to dlatego nic mi nie otworzyło w backtestach.
Nie, nie dlatego, tu było konsekwentnie, więc błędu nie było.
Prawdopodobnie nie otworzy nic w backtestach, bo masz:

Kod: Zaznacz cały

&& ( IsNewBar(NULL,CMO_TF) == true )

A to już masz załatwione w całej pętli:

Kod: Zaznacz cały

if ( IsNewBar ( NULL, CMO_TF) == true )
To niestety nie działa, jeżeli jest dodatkowo jeszcze jako warunek już w tej pętli, bo tu już IsNewBar()=false.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Mistyfikator
Pasjonat
Pasjonat
Posty: 932
Rejestracja: 05 lip 2021, 20:35

Re: Dax/Nasdaq Daytrading

Nieprzeczytany post autor: Mistyfikator »

Ano racja ! To jest absolutna prawda.
W sumie trzeba ten warunek wyrzucić, można to załatwić tym limitem OrdersTotal co i tak jest.
Skoro EA jest i tak proste.

Tu jest wersja, która juz otwiera,
Oczywiście nie polecam użycia z obecnymi ustawieniami MM :

Kod: Zaznacz cały


//+------------------------------------------------------------------+
//|                                                   CMO_EXPERT.mq4 |
//|                                                           MSTFKR |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "MSTFKR"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot_Size = 0.1;
extern int Orders_Total_Limit = 1;
extern int Stop_Loss_Points_Value = 800;
extern int Take_Profit_Value = 1300;

extern ENUM_TIMEFRAMES CMO_TF = PERIOD_M5;
extern int CMO_no_of_Periods = 8;

extern ENUM_TIMEFRAMES RSI_TF = PERIOD_M5;
extern int RSI_no_of_Periods = 8;

extern ENUM_APPLIED_PRICE RSI_Applied_Price = PRICE_CLOSE;
extern int RSI_Shift = 1;

extern double CMO_Buy_Level = -50;
extern double CMO_Sell_Lewel = 50;

extern double RSI_Buy_Level = 30;
extern double RSI_Sell_Level = 70;

extern bool Order_Send_Enable = false;





//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
 bool IsNewBar   (string          f_symbol,        // instrument finansowy
                  ENUM_TIMEFRAMES f_timeFrame,     // przedział czasowy
                  bool            f_current=false) // bieżąca świeca
               
               {
//---
                 static datetime f_lastBar=0;
                 datetime f_bar=iTime(f_symbol,f_timeFrame,0);
//---
                 if(f_current==false && f_lastBar==0)
                 {
                  f_lastBar=f_bar; return false;
                 }
//---
                    if(f_lastBar!=f_bar)
                   {
                    f_lastBar=f_bar; return true;
                   }
                    else return false;
                   }
void OnTick()

  {   
                                 
                        
      bool L = false;
      bool S = false;

//----- CMO Variables :
      double Sum_of_Closed_Higher = 0;
      double Sum_of_Closed_Lower = 0;
      double Close_Calculated_Now = 0;
      double Open_Calculated_Now = 0;
      double Sum_of_Closed_Higher_Nm = 0;
      double Sum_of_Closed_Lower_Nm = 0;
//---
// CMO_Calculation :
      if ( IsNewBar ( NULL, CMO_TF) == true )
            {     
            for( int i = 1; i <=  CMO_no_of_Periods ; i ++ )                               
            {Close_Calculated_Now = iClose ( NULL, CMO_TF, i );
             Open_Calculated_Now = iOpen ( NULL, CMO_TF, i );
               if ( Close_Calculated_Now >= Open_Calculated_Now )
                  { Sum_of_Closed_Higher = Sum_of_Closed_Higher + Close_Calculated_Now; }                    
               else
                   Sum_of_Closed_Lower = Sum_of_Closed_Lower + Close_Calculated_Now;
                  
            } 
                        Sum_of_Closed_Higher_Nm = NormalizeDouble ( Sum_of_Closed_Higher, _Digits );
                        Sum_of_Closed_Lower_Nm = NormalizeDouble ( Sum_of_Closed_Lower, _Digits ); 
                        Print( "Sum_of_Closed_Higher ", Sum_of_Closed_Higher_Nm ); Print( "Sum_Of_Closed_Lower ",Sum_of_Closed_Lower_Nm );
                        double CMO = ( ( Sum_of_Closed_Higher - Sum_of_Closed_Lower ) / ( Sum_of_Closed_Higher + Sum_of_Closed_Lower ) ) * 100 ;                       
                        Print ( "CMO Value, ",CMO_no_of_Periods," bars, TF: ",CMO_TF," is ",CMO ); 
 
 //********************RSI CALCULATION*******************
                        
                        double RSI = iRSI(NULL,RSI_TF,RSI_no_of_Periods,RSI_Applied_Price,RSI_Shift );
                        double RSI_Normal = NormalizeDouble(RSI,_Digits);
                        
                        Print ( "RSI Value = ",RSI_Normal);
 
                        
                        if ( ( OrdersTotal() < Orders_Total_Limit ) && ( RSI_Normal >= RSI_Buy_Level ) && ( CMO <= CMO_Buy_Level ) )
                        
                        { L = true; }
            
                        
                        if ( ( OrdersTotal() < Orders_Total_Limit )  && ( RSI_Normal <= RSI_Sell_Level ) && ( CMO >= CMO_Sell_Lewel ) )
                        
                        { S = true; }
                        
                        
                        if(L==true)
                        
                        {
                        Alert("Conditions for BUY have been met, CMO is ",CMO,". RSI is ",RSI_Normal);
                        
                        if(Order_Send_Enable==true)
                           {
                                 double SL = Ask - (Stop_Loss_Points_Value*_Point);
                                 double SL_Normal = NormalizeDouble(SL,_Digits);
                                 double TP = Ask + (Take_Profit_Value*_Point);
                                 double TP_Normal = NormalizeDouble(TP,_Digits);
                        
                                 if(OrderSend(NULL,OP_BUY,Lot_Size,Ask,0,SL_Normal,TP_Normal,NULL,0,0,clrNONE))
                  
                                 Print("L failed ",GetLastError());
                                 else
                                 Print("L: ",Ask);
                           }
                       }      
                       
                       
                          if(S==true)
                        
                        {
                        Alert("Conditions for SELL have been met, CMO is ",CMO,". RSI is ",RSI_Normal);
                        
                        if(Order_Send_Enable==true)
                           {
                                 double SL = Bid + (Stop_Loss_Points_Value*_Point);
                                 double SL_Normal = NormalizeDouble(SL,_Digits);
                                 double TP = Bid - (Take_Profit_Value*_Point);
                                 double TP_Normal = NormalizeDouble(TP,_Digits);
                        
                                 if(OrderSend(NULL,OP_SELL,Lot_Size,Bid,0,SL_Normal,TP_Normal,NULL,0,0,clrNONE))
                  
                                 Print("S failed ",GetLastError());
                                 else
                                 Print("S: ",Bid);
                           }
                       }             
            }
         
  }
//+------------------------------------------------------------------+



Sory, że nie wrzucam pliku, ale za cholerę nie wiem, jak załączyć EA bezpośrednio w poście.

Zablokowany