MnQInvestmentDevelopment/MnQInvestment/01_Amadeus/AMA-DEUSDEUSDEUS-4.mq5

212 lines
16 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 15:08:44 +02:00
<EFBFBD><EFBFBD>#property copyright "Copyright 2023, M & Q Investment Group"
#property link "https://www.mql5.com"
#property version "1.00"
#include <trade/trade.mqh>
CTrade trade;
//-------------------------------------------OVEROPTIMIZED VERSION AFTER 1. TESTING -------------
input double TrigPDif = 0.00005;
input double DesiredProfitPerc = 20;
input int ExpiryTime = 120;
input double Lots = 1.0;
input double EuroPerLotPerMinValue = 0.9365;
input double RuleMinimumTPSLValue = 0.0001;
input double PufferDistance = 0.0001;
input double WhiteYellowProtRange = 0.00001;
input bool SWhiteProtection = true;
//AUSSTEHEND input double TPSLFactor = 1.0;
input string Opentime = "07:30:00";
input string CloseTime = "23:00";
double accountequity = 0;
long TickVolumes[];
double bid0 = 0;
double accountbalancebeginning;
double accountprofit;
double Lostrades = 0;
double Wintrades = 0;
double AllWinRatio = 0;
int OnInit(){
accountbalancebeginning = AccountInfoDouble(ACCOUNT_BALANCE);
//OrderinAction = false;
return(INIT_SUCCEEDED);
}
void OnTick(){
//DETERMINING TIMEFRAME
datetime opentimenow = StringToTime(Opentime);
datetime closetimenow = StringToTime(CloseTime);
datetime currenttime = TimeCurrent();
if(currenttime > opentimenow && currenttime < closetimenow){
/*//GET PINK AMA VALUES
double PinkAMAPriceArray[];
int PinkAMADefinition = iAMA (_Symbol,_Period,1,1,20,0,PRICE_CLOSE);
ArraySetAsSeries(PinkAMAPriceArray,true);
//AMA DEF, one line, current candle, 3 candles, store result
CopyBuffer(PinkAMADefinition,0,0,10,PinkAMAPriceArray);
double PinkAMACurrentValue = NormalizeDouble(PinkAMAPriceArray[0],6);*/
//GET YELLWOW AMA VALUES
double YellAMAPriceArray[];
int YellAMADefinition = iAMA (_Symbol,_Period,2,5,1,0,PRICE_CLOSE);
ArraySetAsSeries(YellAMAPriceArray,true);
//AMA DEF, one line, current candle, 3 candles, store result
CopyBuffer(YellAMADefinition,0,0,10,YellAMAPriceArray);
double YellAMACurrentValue = NormalizeDouble(YellAMAPriceArray[0],6);
//GET WHITE AMA VALUES
double WhiteAMAPriceArray[];
int WhiteAMADefinition = iAMA (_Symbol,_Period,2,5,1,1,PRICE_CLOSE);
ArraySetAsSeries(WhiteAMAPriceArray,true);
//AMA DEF, one line, current candle, 3 candles, store result
CopyBuffer(WhiteAMADefinition,0,0,10,WhiteAMAPriceArray);
double WhiteAMACurrentValue = NormalizeDouble(WhiteAMAPriceArray[0],6);
//GET SWHITE AMA VALUES
double SWhiteAMAPriceArray[];
int SWhiteAMADefinition = iAMA (_Symbol,_Period,2,5,1,2,PRICE_CLOSE);
ArraySetAsSeries(SWhiteAMAPriceArray,true);
//AMA DEF, one line, current candle, 3 candles, store result
CopyBuffer(SWhiteAMADefinition,0,0,10,SWhiteAMAPriceArray);
double SWhiteAMACurrentValue = NormalizeDouble(SWhiteAMAPriceArray[0],6);
//GET RED AMA VALUES
double RedAMAPriceArray[];
int RedAMADefinition = iAMA (_Symbol,_Period,5,2,30,0,PRICE_CLOSE);
ArraySetAsSeries(RedAMAPriceArray,true);
//AMA DEF, one line, current candle, 3 candles, store result
CopyBuffer(RedAMADefinition,0,0,10,RedAMAPriceArray);
double RedAMACurrentValue = NormalizeDouble(RedAMAPriceArray[0],6);
//GET ORANGE AMA VALUES
double OrangeAMAPriceArray[];
int OrangeAMADefinition = iAMA (_Symbol,_Period,5,2,30,1,PRICE_CLOSE);
ArraySetAsSeries(OrangeAMAPriceArray,true);
//AMA DEF, one line, current candle, 3 candles, store result
CopyBuffer(OrangeAMADefinition,0,0,10,OrangeAMAPriceArray);
double OrangeAMACurrentValue = NormalizeDouble(OrangeAMAPriceArray[0],6);
//SET THE ORDER
bid0 = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
double PufferPrice = RedAMACurrentValue + PufferDistance;
double InvalidStopProhibitorline = RuleMinimumTPSLValue + PufferDistance + RedAMACurrentValue;
double iLow1 = iLow(_Symbol,PERIOD_CURRENT,1);
double iLow2 = iLow(_Symbol,PERIOD_CURRENT,2);
/*//DYNAMIC CALCULATION OF LOT SIZE
double accountbalance = AccountInfoDouble(ACCOUNT_BALANCE);
double lotsizegeneral = (accountbalance * DesiredProfitPerc/100) / 146;
lotsizegeneral = NormalizeDouble(lotsizegeneral,1);*/
if(SWhiteProtection == false){SWhiteAMACurrentValue = 5;}
if( iLow1 > OrangeAMACurrentValue + PufferDistance && iLow2 > OrangeAMACurrentValue + PufferDistance){
if(
//YELLOW FALLS CHECK
WhiteAMACurrentValue - WhiteYellowProtRange > YellAMACurrentValue &&
//YELLOW ABOVE - AGAINST INVALIFD STOPTRIFGGER
YellAMACurrentValue > SymbolInfoDouble(_Symbol,SYMBOL_BID) &&
//YELLOW ABOVE RED
YellAMACurrentValue > PufferPrice &&
SWhiteAMACurrentValue > WhiteAMACurrentValue &&
bid0 > InvalidStopProhibitorline &&
PositionsTotal() == 0 &&
OrdersTotal() == 0){
double TrigP = NormalizeDouble(bid0 - TrigPDif,_Digits);
double TP = NormalizeDouble(RedAMACurrentValue,_Digits);
double SL = NormalizeDouble(bid0 + (bid0 - RedAMACurrentValue),_Digits);
datetime OrderExpTime = TimeCurrent() + ExpiryTime;
/*accountequity = AccountInfoDouble(ACCOUNT_EQUITY);
double AbsoluouteDesiredProfit = accountequity * DesiredProfitPerc / 100;
double MoneyperPipValue = AbsoluouteDesiredProfit / EuroPerLotPerMinValue;
double TPtoTrigPDiff = TrigP - TP;
double TPtoTrigPDiffPips = TPtoTrigPDiff / 0.00001;
double Lotties = MoneyperPipValue / TPtoTrigPDiffPips;
double RealLotties = NormalizeDouble(Lotties,2);*/
trade.SellStop(Lots,TrigP,_Symbol,SL,TP,ORDER_TIME_SPECIFIED,OrderExpTime);
Print(//"\nPinkAMA-Value ",PinkAMACurrentValue,
"\nYellAMA-Value ",YellAMACurrentValue,
"\nWhiteAMA-Value ",WhiteAMACurrentValue,
"\nRedAMA-Value ",RedAMACurrentValue,
"\nOrangeAMA-Value ",OrangeAMACurrentValue,
"\niLow 1: ",iLow1,
"\niLow2",iLow2,
"\nBid ",bid0);
}
}
// DISPLAY OF VALUES ON CHART
accountprofit = accountequity - accountbalancebeginning;
accountprofit = NormalizeDouble(accountprofit,2);
Comment("\nServertime: ", TimeCurrent(),
"\nCurrenttime: ",TimeCurrent(),
"\nProfit: ",accountprofit,
"\nEquity: ",accountequity,
//"\nPinkAMA-Value ",PinkAMACurrentValue,
"\nYellAMA-Value ",YellAMACurrentValue,
"\nWhiteAMA-Value ",WhiteAMACurrentValue,
"\nRedAMA-Value ",RedAMACurrentValue,
"\nOrangeAMA-Value ",OrangeAMACurrentValue,
"\niLow 1: ",iLow1,
"\niLow2",iLow2,
"\nBid ",bid0);
}//END TIMEFRAME
}//END ONTICK
void OnDeinit(const int reason){
Lostrades = TesterStatistics(STAT_LOSS_TRADES);
Wintrades = TesterStatistics(STAT_PROFIT_TRADES);
if(Lostrades + Wintrades > 0){
AllWinRatio = Wintrades / (Wintrades + Lostrades);
}else{AllWinRatio = 0;}
Print("Verlorene Trades: ",Lostrades,
"Gewonnenen Trades: ",Wintrades,
"Gewinnrate:________",AllWinRatio);
}
double OnTester(){
Lostrades = TesterStatistics(STAT_LOSS_TRADES);
Wintrades = TesterStatistics(STAT_PROFIT_TRADES);
if(Lostrades + Wintrades > 0){
AllWinRatio = Wintrades / (Wintrades + Lostrades);
}else{AllWinRatio = 0;}
return(AllWinRatio);
}