Initial comit of TrendBreakouts
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| TrendBreakouts.mq5 |
|
||||
//| Copyright 2023, MetaQuotes Ltd. |
|
||||
//| https://www.mql5.com |
|
||||
//+------------------------------------------------------------------+
|
||||
#property copyright "Copyright 2023, MetaQuotes Ltd."
|
||||
#property link "https://www.mql5.com"
|
||||
#property version "1.00"
|
||||
|
||||
|
||||
#define NUM_WEEKS_RESEARCH 48
|
||||
#include "Algo_Skeleton_Functions.mqh"
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert initialization function |
|
||||
//+------------------------------------------------------------------+
|
||||
int bullishCandlesCount = 0 ;
|
||||
int conditionMetBullish = 0 ;
|
||||
int secondConditionMetBullish = 0;
|
||||
int bearishCandlesCount = 0;
|
||||
int conditionMetBearish = 0 ;
|
||||
int secondConditionMetBearish = 0 ;
|
||||
|
||||
input group "Conditions"
|
||||
input bool firstCondition = false ;
|
||||
input bool secondCondition = false ;
|
||||
input bool noCondition = false ;
|
||||
|
||||
int OnInit()
|
||||
{
|
||||
//---
|
||||
|
||||
//---
|
||||
/* string fileName = "First_Condition_Bullish.csv" ; // if you want to find the csv file, go to file -> open data folder -> mql5 -> files . all from the visual mode
|
||||
int fileHandle = FileOpen(fileName,FILE_READ|FILE_WRITE |FILE_CSV|FILE_ANSI);
|
||||
|
||||
FileSeek(fileHandle,0,SEEK_END);
|
||||
FileWrite(fileHandle,"-----","Size of Week 1","Size of Week 2", "Monday", "Tuesday","Wednesday","Thursday","Friday","Retracement Measure","Low below previous close","Day of lowest point"); */
|
||||
|
||||
|
||||
string fileName1 = "First_Condition_Bearish.csv" ; // if you want to find the csv file, go to file -> open data folder -> mql5 -> files . all from the visual mode
|
||||
int fileHandle1 = FileOpen(fileName1,FILE_READ|FILE_WRITE |FILE_CSV|FILE_ANSI);
|
||||
|
||||
FileSeek(fileHandle1,0,SEEK_END);
|
||||
FileWrite(fileHandle1,"-----","Size of Week 1","Size of Week 2", "Monday", "Tuesday","Wednesday","Thursday","Friday","Retracement Measure","High above previous close","Day of Highest point");
|
||||
|
||||
return(INIT_SUCCEEDED);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert deinitialization function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnDeinit(const int reason)
|
||||
{
|
||||
//---
|
||||
Print("Count: "+ bullishCandlesCount + " First Condition: " + conditionMetBullish + " Second Condition: " + secondConditionMetBullish);
|
||||
Print("Count: "+ bearishCandlesCount + " First Condition: " + conditionMetBearish + " Second Condition: " + secondConditionMetBearish);
|
||||
|
||||
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert tick function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnTick()
|
||||
{
|
||||
//---
|
||||
|
||||
|
||||
|
||||
if(newCandleDetectorDaily.isNewCandle())
|
||||
{
|
||||
//objectsManager.drawVerticalLine(clrAliceBlue, TimeCurrent());
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
int shift = 2 ;
|
||||
if(newCandleDetectorWeekly.isNewCandle())
|
||||
{
|
||||
objectsManager.drawVerticalLine(clrRed, TimeCurrent());
|
||||
|
||||
if(candleClosedBullish(PERIOD_W1,shift))
|
||||
{
|
||||
if(!bullishCandleIsWeak(PERIOD_W1,shift,WICK_RATIO_REJECTION))
|
||||
{
|
||||
|
||||
bullishCandlesCount++ ;
|
||||
|
||||
if(firstCondition){
|
||||
if((iHigh(_Symbol,PERIOD_W1,1) > iHigh(_Symbol,PERIOD_W1,2)) && (iLow(_Symbol,PERIOD_W1,1) >iLow(_Symbol,PERIOD_W1,2)))
|
||||
{
|
||||
saveInCsv("firstCondition_Bullish.csv");
|
||||
conditionMetBullish++ ;
|
||||
}
|
||||
}
|
||||
|
||||
if(secondCondition){
|
||||
if((iHigh(_Symbol,PERIOD_W1,1) > iClose(_Symbol,PERIOD_W1,2)) && (iLow(_Symbol,PERIOD_W1,1) > iLow(_Symbol,PERIOD_W1,2)))
|
||||
{
|
||||
saveInCsv("secondCondition_Bullish.csv");
|
||||
secondConditionMetBullish++ ;
|
||||
}
|
||||
}
|
||||
|
||||
if(noCondition){
|
||||
saveInCsv("noCondition_Bullish.csv");
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(candleClosedBearish(PERIOD_W1,shift))
|
||||
{
|
||||
|
||||
if(!bearishCandleIsWeak(PERIOD_W1,shift,WICK_RATIO_REJECTION))
|
||||
{
|
||||
|
||||
bearishCandlesCount++ ;
|
||||
if((iLow(_Symbol,PERIOD_W1,1) < iLow(_Symbol,PERIOD_W1,2)) && (iHigh(_Symbol,PERIOD_W1,1) < iHigh(_Symbol,PERIOD_W1,2)))
|
||||
{
|
||||
conditionMetBearish++ ;
|
||||
}
|
||||
|
||||
|
||||
if((iLow(_Symbol,PERIOD_W1,1) < iClose(_Symbol,PERIOD_W1,2)) && (iHigh(_Symbol,PERIOD_W1,1) < iHigh(_Symbol,PERIOD_W1,2)))
|
||||
{
|
||||
secondConditionMetBearish++ ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Print("bearish candles count: " + bearishCandlesCount);
|
||||
//Print("bullish canldes count: " + bullishCandlesCount);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
|
||||
void saveInCsv(string csvFileName){
|
||||
int lastWeekDaysArr[5] ;
|
||||
for(int i=0; i<5; i++)
|
||||
{
|
||||
lastWeekDaysArr[i]= -1;
|
||||
}
|
||||
for(int i=5 ; i>0 ; i--)
|
||||
{
|
||||
if(candleClosedBullish(PERIOD_D1,i))
|
||||
{
|
||||
lastWeekDaysArr[5-i] = 1 ;
|
||||
}
|
||||
if(candleClosedBearish(PERIOD_D1,i))
|
||||
{
|
||||
lastWeekDaysArr[5-i] = 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
double firstWeekSize = iHigh(_Symbol,PERIOD_W1,2) - iLow(_Symbol,PERIOD_W1,2) ;
|
||||
double secondWeekSize = iHigh(_Symbol,PERIOD_W1,1) - iLow(_Symbol,PERIOD_W1,1) ;
|
||||
|
||||
|
||||
datetime time = iTime(_Symbol,PERIOD_W1,2);
|
||||
string timeInStr = TimeToString(time,TIME_DATE);
|
||||
|
||||
string fileName = csvFileName ; // if you want to find the csv file, go to file -> open data folder -> mql5 -> files . all from the visual mode
|
||||
int fileHandle = FileOpen(fileName,FILE_READ|FILE_WRITE/* |FILE_CSV|FILE_ANSI*/);
|
||||
|
||||
|
||||
|
||||
FileSeek(fileHandle,0,SEEK_END);
|
||||
FileWrite(fileHandle,timeInStr,firstWeekSize,secondWeekSize,lastWeekDaysArr[0],lastWeekDaysArr[1],lastWeekDaysArr[2],lastWeekDaysArr[3],lastWeekDaysArr[4]);
|
||||
|
||||
FileClose(fileHandle);
|
||||
}
|
||||
Reference in New Issue
Block a user