67 lines
1.7 KiB
MQL5
67 lines
1.7 KiB
MQL5
|
#property copyright "Copyright 2023, M & Q Investment Group"
|
||
|
#property link "https://www.mql5.com"
|
||
|
#property version "1.00"
|
||
|
#include <trade/trade.mqh>
|
||
|
CTrade trade;
|
||
|
|
||
|
int OnInit()
|
||
|
{
|
||
|
|
||
|
|
||
|
return(INIT_SUCCEEDED);
|
||
|
}
|
||
|
|
||
|
void OnDeinit(const int reason)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
void OnTick()
|
||
|
{
|
||
|
|
||
|
|
||
|
if(PositionsTotal() == 0){
|
||
|
|
||
|
double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
|
||
|
double desiredriskpercpoints = 5;
|
||
|
double TradeDistance = 0.0004;
|
||
|
double TriggerP = bid - 0.0;
|
||
|
TriggerP = NormalizeDouble(TriggerP,_Digits);
|
||
|
|
||
|
double tp = TriggerP - TradeDistance;
|
||
|
tp = NormalizeDouble(tp,_Digits);
|
||
|
|
||
|
double sl = TriggerP + TradeDistance;
|
||
|
sl = NormalizeDouble(sl,_Digits);
|
||
|
|
||
|
double TrigSLDiff = sl - TriggerP;
|
||
|
TrigSLDiff = NormalizeDouble(TrigSLDiff,_Digits);
|
||
|
|
||
|
trade.Sell(CalcLots(desiredriskpercpoints,TrigSLDiff),_Symbol,bid,sl,tp);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
double CalcLots(double riskPercent, double SLDistance){
|
||
|
|
||
|
double ticksize = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
|
||
|
double tickvalue = SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE);
|
||
|
double Lotstep = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
|
||
|
|
||
|
if(ticksize == 0 || tickvalue == 0 || Lotstep == 0){
|
||
|
Print(__FUNCTION__,"Lotsize cannot be calculated");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
double riskMoney = AccountInfoDouble(ACCOUNT_BALANCE) * riskPercent /100;
|
||
|
double MoneyperLotstep = (SLDistance / ticksize) * tickvalue * Lotstep;
|
||
|
|
||
|
if(MoneyperLotstep == 0){
|
||
|
|
||
|
Print(__FUNCTION__,"Lotsize cannot be calculated");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
double lots = MathFloor(riskMoney / MoneyperLotstep) * Lotstep;
|
||
|
return lots;
|
||
|
}
|