Dax/Nasdaq Daytrading
-
- Fanatyk
- Posty: 14967
- Rejestracja: 29 paź 2012, 09:52
Re: Dax/Nasdaq Daytrading
Niech ci bedzie i bełkot i niezrozumiałość
wszystkiego dobrego
KOndycjo
wszystkiego dobrego
KOndycjo
-
- Pasjonat
- Posty: 932
- Rejestracja: 05 lip 2021, 20:35
Re: Dax/Nasdaq Daytrading
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ą :
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.
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);
}
}
}
}
//+------------------------------------------------------------------+
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.
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Dax/Nasdaq Daytrading
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.
Programuję wskaźniki i EA do MetaTrader 4/5.
-
- Pasjonat
- Posty: 932
- Rejestracja: 05 lip 2021, 20:35
Re: Dax/Nasdaq Daytrading
mql4 nie da radyninjaproject pisze: ↑21 lip 2022, 23:13A czemu ty wklejasz kod, a nie, po prostu, załączasz pliku mq4 w załącznikach?
Jak to zrobić, skompresować ?
Zresztą, żeby do uruchomić serio wystarczy skopiować, wkleić, skompilować i przenieść do MT4
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Dax/Nasdaq Daytrading
Kod będzie działać, ale masz:
extern double CMO_Sell_Lewel = 50;
Lewel zamiast Level - bo w innych pozycjach masz Level
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.
Programuję wskaźniki i EA do MetaTrader 4/5.
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Dax/Nasdaq Daytrading
Ty wiesz, ja wiem, ale większość nie ma pojęcia.Mistyfikator pisze: ↑21 lip 2022, 23:18mql4 nie da radyninjaproject pisze: ↑21 lip 2022, 23:13A czemu ty wklejasz kod, a nie, po prostu, załączasz pliku mq4 w załącznikach?
Jak to zrobić, skompresować ?
Zresztą, żeby do uruchomić serio wystarczy skopiować, wkleić, skompilować i przenieść do MT4
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.
Programuję wskaźniki i EA do MetaTrader 4/5.
-
- Pasjonat
- Posty: 932
- Rejestracja: 05 lip 2021, 20:35
Re: Dax/Nasdaq Daytrading
Dzięki, już poprawiłemninjaproject pisze: ↑21 lip 2022, 23:21Kod będzie działać, ale masz:
extern double CMO_Sell_Lewel = 50;
Lewel zamiast Level - bo w innych pozycjach masz Level
Może to dlatego nic mi nie otworzyło w backtestach.
-
- Pasjonat
- Posty: 932
- Rejestracja: 05 lip 2021, 20:35
Re: Dax/Nasdaq Daytrading
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
Nie dawało rady, to wkleiłem kod.
Takie rozwiązanie też ma swoje zalety
- ninjaproject
- Maniak
- Posty: 4944
- Rejestracja: 30 lip 2019, 13:15
Re: Dax/Nasdaq Daytrading
Nie, nie dlatego, tu było konsekwentnie, więc błędu nie było.Mistyfikator pisze: ↑21 lip 2022, 23:23Dzięki, już poprawiłemninjaproject pisze: ↑21 lip 2022, 23:21Kod będzie działać, ale masz:
extern double CMO_Sell_Lewel = 50;
Lewel zamiast Level - bo w innych pozycjach masz Level
Może to dlatego nic mi nie otworzyło w backtestach.
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 )
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.
Programuję wskaźniki i EA do MetaTrader 4/5.
-
- Pasjonat
- Posty: 932
- Rejestracja: 05 lip 2021, 20:35
Re: Dax/Nasdaq Daytrading
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 :
Sory, że nie wrzucam pliku, ale za cholerę nie wiem, jak załączyć EA bezpośrednio w poście.
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);
}
}
}
}
//+------------------------------------------------------------------+