Delete Gandalf.mq5

This commit is contained in:
CristianAlam
2025-07-12 19:45:58 +03:00
committed by GitHub
parent b283383b5a
commit 5c1679d4e4
-363
View File
@@ -1,363 +0,0 @@
//+------------------------------------------------------------------+
//| Gandalf.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 "GraphicalObjectsManager.mqh"
#include "TempLineObjectAttributes.mqh"
#include "ObjectConfirmationUnit.mqh"
#include "BuyGandalf.mqh"
#include "SellGandalf.mqh"
#include "LotSizeCalculator.mqh"
LotSizeCalculator lsCalc;
GraphicalObjectsManager graphicalObjectsManager ;
ObjectConfirmationUnit objectConfUnit ;
BuyGandalf buyGandalfGray ;
SellGandalf SellGandalfGray ;
bool buyCase = false ;
bool sellCase = false ;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
TempLineObjectAttributes tempLineObjectAttr ;
int OnInit()
{
//--- create timer
EventSetTimer(60);
graphicalObjectsManager.addTotalRiskText();
graphicalObjectsManager.addTakeBuyTradeButton();
graphicalObjectsManager.addTakeSellTradeButton();
graphicalObjectsManager.addText();
graphicalObjectsManager.addConfirmButton();
//ObjectSetString(0,"totalRiskText",OBJPROP_TEXT,"the new ext is : !");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
updateOverAllRiskText();
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
}
//+------------------------------------------------------------------+
//| Trade function |
//+------------------------------------------------------------------+
void OnTrade()
{
//---
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
const MqlTradeRequest& request,
const MqlTradeResult& result)
{
//---
}
//+------------------------------------------------------------------+
//| Tester function |
//+------------------------------------------------------------------+
double OnTester()
{
//---
double ret=0.0;
//---
//---
return(ret);
}
//+------------------------------------------------------------------+
//| TesterInit function |
//+------------------------------------------------------------------+
void OnTesterInit()
{
//---
}
//+------------------------------------------------------------------+
//| TesterPass function |
//+------------------------------------------------------------------+
void OnTesterPass()
{
//---
}
//+------------------------------------------------------------------+
//| TesterDeinit function |
//+------------------------------------------------------------------+
void OnTesterDeinit()
{
//---
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
switch(id)
{
case CHARTEVENT_CLICK:
{
break;
}
//--- clicking on a graphical object
case CHARTEVENT_OBJECT_CLICK:
{
if(sparam == "BUY_BTN")
{
buyCase = true ;
graphicalObjectsManager.drawStopLossLineGandalf();
objectConfUnit.setWaitingStatus(true);
}
else if(sparam == "SELL_BTN"){
sellCase = true ;
graphicalObjectsManager.drawStopLossLineGandalf();
objectConfUnit.setWaitingStatus(true);
}
else
if(sparam == "CONFIRM_BTN")
{
if(buyCase == true)
{
if(objectConfUnit.getWaitingStatus() == true) // THIS IS TO MAKE SURE THAT THERE IS SOMETHING SELECTED TO BE CONFIRMED
{
double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK) ;
string textRecieved;
graphicalObjectsManager.EditTextGet(textRecieved,0,"textName");
double riskAsDouble = StringToDouble(textRecieved);
double stopLossPrice = tempLineObjectAttr.getPrice();
if(ObjectDelete(_Symbol,"sl"))
{
}
else
{
Print("Failed to delete the stop loss line ! Error: "+ GetLastError());
}
//Print("Buy info has been set, SL price: " + stopLossPrice + " risk is: " + riskAsDouble);
double lotsToTrade = lsCalc.calculateLotSize(riskAsDouble,stopLossPrice);
buyGandalfGray.takeBuyTradeGandalf(lotsToTrade,stopLossPrice);
objectConfUnit.setWaitingStatus(false);
buyCase = false ;
// change the risk text
//updateOverAllRiskText();
}
}
else
if(sellCase == true)
{
if(objectConfUnit.getWaitingStatus() == true) // THIS IS TO MAKE SURE THAT THERE IS SOMETHING SELECTED TO BE CONFIRMED
{
double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
string textRecieved;
graphicalObjectsManager.EditTextGet(textRecieved,0,"textName");
double riskAsDouble = StringToDouble(textRecieved);
double stopLossPrice = tempLineObjectAttr.getPrice();
if(ObjectDelete(_Symbol,"sl")){
}
else{
Print("Failed to delete the stop loss line ! Error: "+ GetLastError());
}
double lotsToTrade = lsCalc.calculateLotSize(riskAsDouble,stopLossPrice);
SellGandalfGray.takeSellTradeGandalf(lotsToTrade,stopLossPrice);
objectConfUnit.setWaitingStatus(false);
sellCase = false ;
// change the risk text
//updateOverAllRiskText();
}
}
}
break;
}
case CHARTEVENT_OBJECT_DRAG:
{
if(ObjectGetInteger(_Symbol,sparam,OBJPROP_TYPE,0) == OBJ_HLINE)
{
if(StringSubstr(sparam,0,2) == "sl") // case of sl line (attached to a zone)
{
double stopLossPrice = ObjectGetDouble(_Symbol,sparam,OBJPROP_PRICE,0);
tempLineObjectAttr.setId(sparam);
tempLineObjectAttr.setPrice(stopLossPrice);
}
else
if(StringSubstr(sparam,0,2) == "tp") // case of tp line (attached to a zone)
{
double takeProfitPrice = ObjectGetDouble(_Symbol,sparam,OBJPROP_PRICE,0);
tempLineObjectAttr.setId(sparam);
tempLineObjectAttr.setPrice(takeProfitPrice);
}
}
break;
}
case CHARTEVENT_KEYDOWN:
{
}
//---
}
}
//+------------------------------------------------------------------+
//| BookEvent function |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
//---
}
//+------------------------------------------------------------------+
void updateOverAllRiskText(){
//double pointValue = lsCalc.PointValue(_Symbol);
double pointValue = PointValueNew(_Symbol);
double overAllRisk = 0 ;
for(int i=PositionsTotal() -1 ;i >= 0 ; i--){
//Print("entered here !");
ulong ticket = PositionGetTicket(i);
int positionType = PositionGetInteger(POSITION_TYPE);
double positionStopLossPrice = PositionGetDouble(POSITION_SL);
double positionOpenPrice = PositionGetDouble(POSITION_PRICE_OPEN);
double positionLotSize = PositionGetDouble(POSITION_VOLUME);
if(positionType == POSITION_TYPE_BUY){
double positionStopLossInPoints = (positionOpenPrice - positionStopLossPrice) * MathPow(10 , SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)) ;
double riskAmount = pointValue*positionLotSize*positionStopLossInPoints ;
overAllRisk = overAllRisk + riskAmount ;
string riskAsString = DoubleToString(overAllRisk);
ObjectSetString(0,"totalRiskText",OBJPROP_TEXT,"Total Risk is:" + riskAsString);
}
else if(positionType == POSITION_TYPE_SELL){
double positionStopLossInPoints = (positionStopLossPrice - positionOpenPrice) * MathPow(10 , SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)) ;
double riskAmount = pointValue*positionLotSize*positionStopLossInPoints ;
overAllRisk = overAllRisk + riskAmount ;
string riskAsString = DoubleToString(overAllRisk);
ObjectSetString(0,"totalRiskText",OBJPROP_TEXT,"Total Risk is:" + riskAsString);
}
}
}
double PointValueNew(string symbol){
double tickSize = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
double tickValue = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
double point = SymbolInfoDouble(symbol,SYMBOL_POINT);
double ticksPerPoint = tickSize/point ;
double pointValue = tickValue/ticksPerPoint ;
return (pointValue);
}