Delete Gandalf.mq5
This commit is contained in:
-363
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user