Files
Financial-Markets-research/Phoenix_Reborn.mq5
T
2025-07-11 08:43:07 +03:00

202 lines
7.1 KiB
Plaintext

//+------------------------------------------------------------------+
//| Phoenix_Reborn.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"
#include "Phoenix_Functions.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
iOpen(_Symbol,PERIOD_M5,1);
iOpen(_Symbol,PERIOD_M15,1);
iOpen(_Symbol,PERIOD_M30,1);
iOpen(_Symbol,PERIOD_H1,1);
iOpen(_Symbol,PERIOD_H4,1);
for(int i=0; i<NUM_MAX_ALLOWED_TRADES ; i++)
{
BuyActiveTradesArray[i] = NULL ;
SellActiveTradesArray[i] = NULL ;
}
objectsManager.addTextTiger();
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
Print("Buys Count: " + buysCount);
Print("Sells Count: " + sellsCount);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
cleanBuyTradesArr();
cleanSellTradesArr();
/*if(newCandleDetectorM1.isNewCandle()){
datetime currTime = TimeCurrent();
Comment(TimeToString(currTime,TIME_MINUTES) + ": Sell Below: " + currentSupportLowerEdge + " Buy Above: "+ currentResistanceHighEdge);
findAndDrawFractalsAndZones(PERIOD_M1,"PERIOD_M1");
if(candleClosedBelowSupportZone()){
datetime currTime = TimeCurrent();
Comment(TimeToString(currTime,TIME_MINUTES) + ": im taking a sell !");
if(((indexToNewTrade = findAvailableSpotInSellManagerArr()) != -1 ) )
{
Print("indexToNewTrade: ----------------------------------------------" + indexToNewTrade);
double stopLossPrice ;
if(currentResistanceHighEdge != -1){
stopLossPrice = currentResistanceHighEdge + stopLossAboveWickBy ;
}
else{
stopLossPrice = iHigh(_Symbol,PERIOD_M30,1) - stopLossAboveWickBy; // if there is no higher zone , take the last m30 candle's high
}
activeTradeId = sellEntryManager.takeSellTradeTiger(lotSize,stopLossPrice,SymbolInfoDouble(_Symbol,SYMBOL_BID)- netTakeProfit ) ;
SellTradeManagerTiger* tempTigerManagerSell= new SellTradeManagerTiger(activeTradeId); // create an object of type sellTradeManagerTiger
tempTigerManagerSell.setBrokenSupportHigherEdge(currentSupportHighEdge);
tempTigerManagerSell.setBrokenSupportLowerEdge(currentSupportLowerEdge);
SellActiveTradesArray[indexToNewTrade] = tempTigerManagerSell ;// put the new object in the array
sellsCount++;
}
else
{
Comment("i cant take a trade because the arrray is full");
}
currentSupportLowerEdge = -1;
currentSupportHighEdge = -1;
}
if(candleClosedAboveResistanceZone()){
datetime currTime = TimeCurrent();
Comment(TimeToString(currTime,TIME_MINUTES) + ": im taking a buy !");
if(((indexToNewTrade = findAvailableSpotInBuyManagerArr()) != -1))
{
Print("indexToNewTrade:-------------------------------------------- " + indexToNewTrade);
double stopLossPrice ;
if(currentSupportLowerEdge != -1){
stopLossPrice = currentSupportLowerEdge - stopLossUnderWickBy ;
}
else{
stopLossPrice = iLow(_Symbol,PERIOD_M30,1) - stopLossUnderWickBy; // if there is no lower zone , take the last m30 candle's low
}
activeTradeId = buyEntryManager.takeBuyTradeTiger(lotSize,stopLossPrice,SymbolInfoDouble(_Symbol,SYMBOL_ASK)+ netTakeProfit ) ;
BuyTradeManagerTiger* tempTigerManagerBuy= new BuyTradeManagerTiger(activeTradeId); // create an object of type sellTradeManagerTiger
tempTigerManagerBuy.setBrokenResistanceHigherEdge(currentResistanceHighEdge);
tempTigerManagerBuy.setBrokenResistancetLowerEdge(currentResistanceLowEdge);
BuyActiveTradesArray[indexToNewTrade] = tempTigerManagerBuy ;// put the new object in the array
buysCount++;
}
else
{
Comment("i cant take a trade because the arrray is full");
}
currentResistanceHighEdge = -1;
currentResistanceLowEdge = -1;
}
} */
/*if(newCandleDetectorM5.isNewCandle()){
findAndDrawFractalsAndZones(PERIOD_M5,"PERIOD_M5");
int tradeCount = 0 ;
for(int i=0;i<NUM_MAX_ALLOWED_TRADES;i++){
if(BuyActiveTradesArray[i]!= NULL){
tradeCount++ ;
}
}
manageRiskIfNeededPhoenix();
} */
/*if(newCandleDetectorM30.isNewCandle()){
findAndDrawFractalsAndZones(PERIOD_M30,"PERIOD_M30");
int tradeCount = 0 ;
for(int i=0;i<NUM_MAX_ALLOWED_TRADES;i++){
if(BuyActiveTradesArray[i]!= NULL){
tradeCount++ ;
}
}
datetime currTime = TimeCurrent();
ObjectSetString(0,"clockTextTiger",OBJPROP_TEXT,TimeToString(currTime,TIME_MINUTES));
} */
if(newCandleDetectorH4.isNewCandle()){
findAndDrawFractalsAndZones(PERIOD_H4,"PERIOD_H4");
int tradeCount = 0 ;
datetime currTime = TimeCurrent();
ObjectSetString(0,"clockTextTiger",OBJPROP_TEXT,TimeToString(currTime,TIME_MINUTES));
}
if(newCandleDetectorDaily.isNewCandle()){
// objectsManager.drawVerticalLine(clrAqua, TimeCurrent());
}
if(newCandleDetectorWeekly.isNewCandle()){
objectsManager.drawVerticalLine(clrRed, TimeCurrent());;
}
}
//+------------------------------------------------------------------+