MQL5/3_MQL5_EA_Tools/02_Check_Open_Positions.mq5
2025-04-16 11:59:03 -04:00

107 lines
3.4 KiB
MQL5

//+------------------------------------------------------------------+
//| 2.Check_Open_Positions.mq5 |
//| Author: Santiago Cruz |
//| https://www.mql5.com/en/users/algo-trader/ |
//+------------------------------------------------------------------+
#property copyright "Santiago Cruz"
#property link "https://www.mql5.com/en/users/algo-trader/"
#property version "1.00"
#include <Trade/Trade.mqh>
CTrade trade;
CPositionInfo pos_info;
COrderInfo ord_info;
int OpenBuy, OpenSell, OpenBuyOrder, OpenSellOrder;
input ulong InpMagic = 1234;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
trade.SetExpertMagicNumber(InpMagic);
ChartSetInteger(0,CHART_SHOW_GRID,false);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(!IsNewBar()) return;
CheckOpenPositions();
double Closex1 = iClose(_Symbol,PERIOD_CURRENT,1);
double Openx1 = iOpen(_Symbol,PERIOD_CURRENT,1);
//If we want to have only one Buy Position Open at the time, we add OpenBuy<1
if(Closex1 > Openx1)
{
trade.Buy(0.01,_Symbol,0,0,0,NULL);
}
//If we want to have only one Sell Position Open at the time, we add OpenSell<1
if(Closex1 < Openx1)
{
}trade.Sell(0.01,_Symbol,0,0,0,NULL);
Comment("\n OpenBuys = "+OpenBuy+
"\n OpenSells = "+OpenSell);
}
//+------------------------------------------------------------------+
//| Check for New Bar/Candle |
//+------------------------------------------------------------------+
bool IsNewBar(){
static datetime previousTime = 0;
datetime currentTime = iTime(_Symbol,PERIOD_CURRENT,0);
if(previousTime!=currentTime){
previousTime = currentTime;
return true;
}
return false;
}
//+------------------------------------------------------------------+
//| Check Open Positions |
//+------------------------------------------------------------------+
void CheckOpenPositions(){
OpenBuy=0;
OpenSell=0;
for(int i=PositionsTotal()-1; i>=0; i--)
{
pos_info.SelectByIndex(i);
if(pos_info.Symbol()==_Symbol && pos_info.Magic()==InpMagic)
{
if(pos_info.PositionType()==POSITION_TYPE_BUY)
{
OpenBuy++;
}
else if(pos_info.PositionType()==POSITION_TYPE_SELL)
{
OpenSell++;
}
}
}
}
//+------------------------------------------------------------------+