Tekrar deneyin.
I haven't tried much. I want to close this position if it hurts 1%. If 2% profit, position is closed. Do you know how to do it?
- Neither can we. We can't see your broken code. There are no mind readers here and our crystal balls are cracked.
- Never risk more than a small percentage of your account, certainly less than 2% per trade, 6% total to the account.
In code (MT4): Risk depends on
your initial stop loss, lot size, and the value of the pair. It does not depend on margin and leverage.
- You place the stop where it needs to be — where the reason for the trade is no longer valid. E.g. trading a support bounce the stop goes below the support.
- AccountBalance * percent/100 = RISK = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot + CommissionPerLot) (Note OOP-OSL includes the spread, and DeltaPerLot is usually around $10/pip but it takes account of the exchange rates of the pair vs. your account currency.)
- Do NOT use TickValue by itself - DeltaPerLot
and verify that MODE_TICKVALUE is returning a value in your deposit currency, as promised by the documentation, or
whether it is returning a value in the instrument's base currency.
MODE_TICKVALUE is not reliable on non-fx instruments with many brokers - MQL4 programming forum 2017.10.10
Is there an universal solution for Tick value? - Currency Pairs - General - MQL5 programming forum 2018.02.11
Lot value calculation off by a factor of 100 - MQL5 programming forum 2019.07.19 - You must normalize lots properly and check against min and max.
- You must also check FreeMargin to avoid stop out
Most pairs are worth about $10 per PIP. A $5 risk with a (very small) 5 PIP SL is $5/$10/5 or 0.1 Lots maximum.
If 1% damage, position is closed. I wrote the code, but it doesn't work.
Example.
The drawdown (in%) input parameter sets the drawdown.
Work algorithm:
- go around the list of positions
- determine the type of position
- if the position is unprofitable, then we consider the drawdown
- if the drawdown exceeds "drawdown (in%)" - close the position
The code:
//+------------------------------------------------------------------+ //| Percentage Drawdown.mq5 | //| Copyright © 2019, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2019, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.000" //--- #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> //--- CPositionInfo m_position; // object of CPositionInfo class CTrade m_trade; // object of CTrade class //--- input parameters input double InpDrawdown = -1; // drawdown (in %) //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- m_trade.SetExpertMagicNumber(456); m_trade.SetMarginMode(); m_trade.SetTypeFillingBySymbol(Symbol()); m_trade.SetDeviationInPoints(10); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties { double price_current = m_position.PriceCurrent(); double price_open = m_position.PriceOpen(); if(m_position.PositionType()==POSITION_TYPE_BUY) { if(price_open>price_current) { /* price_open | price_current price_open -> 100% price_open-price_current -> x% */ if(((price_open-price_current)*100.0/price_open)<=InpDrawdown) m_trade.PositionClose(m_position.Ticket()); } } else { if(price_open<price_current) { /* price_current | price_open price_open -> 100% price_current-price_open -> x% */ if(((price_current-price_open)*100.0/price_open)<=InpDrawdown) m_trade.PositionClose(m_position.Ticket()); } } } //--- } //+------------------------------------------------------------------+
Example.
The drawdown (in%) input parameter sets the drawdown.
Work algorithm:
- go around the list of positions
- determine the type of position
- if the position is unprofitable, then we consider the drawdown
- if the drawdown exceeds "drawdown (in%)" - close the position
The code:
Hi Vlad! this bit of mql5 code is fantastic. A great template to keep!
Do you have an equivalent for mql4?
Much appreciated!
Hi Vlad! this bit of mql5 code is fantastic. A great template to keep!
Do you have an equivalent for mql4?
Much appreciated!
Not. I threw the old terminal over seven years ago.
Not. I threw the old terminal over seven years ago.
Ok no problem :) thanks for the quick reply. I will attempt to use your code in the EA I am trying to build. If that is okay with you?
Example.
The drawdown (in%) input parameter sets the drawdown.
Work algorithm:
- go around the list of positions
- determine the type of position
- if the position is unprofitable, then we consider the drawdown
- if the drawdown exceeds "drawdown (in%)" - close the position
The code:
In this template, Where would a buy/sell condition be placed? For example, a condition that sell when price moves above the upper bollinger band.
I understand mql4, but for this template, would all the other conditions go under the code within the OnTick() or above the code already
placed within OnTick()?
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use