how i get information from the indicator signs I used in mql4

how i get information from the indicator signs I used in mql4

Manage alerts

Loading saved threads...

hosein · External communityPost link
External question — Stack Overflow Stack Exchange Author: hosein Original post: https://stackoverflow.com/questions/68052499 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. I'm using an indicator in mql4 that gives me a sign to buy or sell, How can I write an expert and read it and perform my operations whenever this symbol is added? thanks
Quote
Report
user16271811 · External communityPost link
External answer — Stack Overflow Stack Exchange Author: user16271811 Original post: https://stackoverflow.com/a/68107235 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. //+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2020, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #include<Trade\Trade.mqh> CTrade trade; int direction=1; input double ATRProfit=2; input double ATRLoss=1; input int TotalTrade=1; input double Risk=0.01; input double DecreaseRisk=0; input uint MaximumConsecutiveWins=4; input double BaseConsecutiveWins=1.96; input int MinimumConsecutiveWinsToResetRisk=2; input bool ExponentialGrowthRisk=true; input bool ChangeDirection=true; input bool Trailing=true; input bool ExitIndicator=true; input bool ExitInProfit=true; input double SecureTheDeal=1; input double SecureTheProfit=0; input group "ATR" input ENUM_TIMEFRAMES ATR_Period=PERIOD_CURRENT; input int ATR_ma_Period=14; input group "ADX" input ENUM_TIMEFRAMES ADX_Period=PERIOD_CURRENT; input int adx_Period=14; input group "MAADX" input ENUM_TIMEFRAMES MAADX_Period=PERIOD_CURRENT; input int adx_ma_Period=10; input int adx_ma_shift=0; input ENUM_MA_METHOD adx_ma_method=MODE_SMA; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int ATR=iATR(_Symbol,ATR_Period,ATR_ma_Period); int ADX=iADX(_Symbol,ADX_Period,adx_Period); int MAADX=iMA(_Symbol,MAADX_Period,adx_ma_Period,adx_ma_shift,adx_ma_method,ADX); void OnTick() { double ATRA[]; double MAIN_LINEA[]; double PLUSDI_LINEA[]; double MINUSDI_LINEA[]; double MAADXA[]; ArraySetAsSeries(ATRA,true); ArraySetAsSeries(MAIN_LINEA,true); ArraySetAsSeries(PLUSDI_LINEA,true); ArraySetAsSeries(MINUSDI_LINEA,true); ArraySetAsSeries(MAADXA,true); CopyBuffer(ATR,0,0,10,ATRA); CopyBuffer(ADX,0,0,10,MAIN_LINEA); CopyBuffer(ADX,1,0,10,PLUSDI_LINEA); CopyBuffer(ADX,2,0,10,MINUSDI_LINEA); CopyBuffer(MAADX,0,0,10,MAADXA); string signal; string CloseAllBUY; string CloseAllSELL; static double LastTrailingBuy; static double LastTrailingSell; double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); bool x=false; if(ConsecutiveTrade()<MinimumConsecutiveWinsToResetRisk) x=true; double risk=Risk*pow(DecreaseRisk,x)*pow(pow(ConsecutiveTrade()-MinimumConsecutiveWinsToResetRisk,1-ExponentialGrowthRisk)*pow(pow(BaseConsecutiveWins,ExponentialGrowthRisk),ConsecutiveTrade()-MinimumConsecutiveWinsToResetRisk),1-x); double PipValue=(((SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE))*_Point)/(SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE))); double lot=floor((risk*AccountInfoDouble(ACCOUNT_BALANCE)/(PipValue*ATRA[0]*ATRLoss/_Point))*100)/100; if(lot==0) lot=0.01; Comment("Best BaseConsecutiveWins",100*(1-(1/(1+0.01*(ATRProfit/ATRLoss))))); if(PLUSDI_LINEA[1]>MINUSDI_LINEA[1] && PLUSDI_LINEA[2]<MINUSDI_LINEA[2] && MAIN_LINEA[1]>MAADXA[1]) signal="buy"; if(PLUSDI_LINEA[1]<MINUSDI_LINEA[1] && PLUSDI_LINEA[2]>MINUSDI_LINEA[2] && MAIN_LINEA[1]>MAADXA[1]) signal="sell"; while(ChangeDirection==true && LastProfit()<0 && PositionsForThisCurrencyPair()<TotalTrade && (signal=="buy" || signal=="sell")) { if(direction==2) direction=0; direction++; break; } if(direction==1) { if(signal=="buy" && CloseAllBUY!="Exit" && PositionsForThisCurrencyPair()<TotalTrade) { trade.Buy(lot,NULL,Ask,(Ask-ATRA[0]*ATRLoss),(Ask+ATRA[0]*ATRProfit),direction); LastTrailingBuy=0; } if(signal=="sell" && CloseAllSELL!="Exit" && PositionsForThisCurrencyPair()<TotalTrade) { trade.Sell(lot,NULL,Bid,(Bid+ATRA[0]*ATRLoss),(Bid-ATRA[0]*ATRProfit),direction); LastTrailingSell=1000; } } if(direction==2) { if(signal=="buy" && CloseAllBUY!="Exit" && PositionsForThisCurrencyPair()<TotalTrade) { trade.Sell(lot,NULL,Bid,(Bid+ATRA[0]*ATRLoss),(Bid-ATRA[0]*ATRProfit),direction); LastTrailingSell=1000; } if(signal=="sell" && CloseAllSELL!="Exit" && PositionsForThisCurrencyPair()<TotalTrade) { trade.Buy(lot,NULL,Ask,(Ask-ATRA[0]*ATRLoss),(Ask+ATRA[0]*ATRProfit),direction); LastTrailingBuy=0; } } if(ExitIndicator==true && ExitInProfit*PositionGetDouble(POSITION_PROFIT)>=0) { if(PLUSDI_LINEA[1]<MINUSDI_LINEA[1]) { CloseAllBUYPositions(); CloseAllBUY="Exit"; } if(PLUSDI_LINEA[1]>MINUSDI_LINEA[1]) { CloseAllSELLPositions(); CloseAllSELL="Exit"; } } if(Trailing==true) { double TrailingBuy=(Ask-ATRA[0]*ATRLoss); if(TrailingBuy<Bid && TrailingBuy>LastTrailingBuy) { CheckTrailingBuy(Ask,TrailingBuy); LastTrailingBuy=TrailingBuy; } double TrailingSell=(Bid+ATRA[0]*ATRLoss); if(TrailingSell>Ask && TrailingSell<LastTrailingSell) { CheckTrailingSell(Bid,TrailingSell); LastTrailingSell=TrailingSell; } } CheckSecureTheDeal(); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CloseAllBUYPositions() { for(int i=PositionsTotal()-1; i>=0; i--) if(_Symbol==PositionGetSymbol(i)) if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) trade.PositionClose(PositionGetTicket(i)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CloseAllSELLPositions() { for(int i=PositionsTotal()-1; i>=0; i--) if(_Symbol==PositionGetSymbol(i)) if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) trade.PositionClose(PositionGetTicket(i)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CheckTrailingBuy(double Ask,double TrailingBuy) { for(int i=PositionsTotal()-1; i>=0; i--) if(_Symbol==PositionGetSymbol(i)) { double SL=PositionGetDouble(POSITION_SL); if((SL<TrailingBuy)||(SL==0)) trade.PositionModify(PositionGetTicket(i),TrailingBuy,PositionGetDouble(POSITION_TP)); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CheckTrailingSell(double Bid,double TrailingSell) { for(int i=PositionsTotal()-1; i>=0; i--) if(_Symbol==PositionGetSymbol(i)) { double SL=PositionGetDouble(POSITION_SL); if((SL>TrailingSell)||(SL==0)) trade.PositionModify(PositionGetTicket(i),TrailingSell,PositionGetDouble(POSITION_TP)); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CheckSecureTheDeal() { for(int i=PositionsTotal()-1; i>=0; i--) if(_Symbol==PositionGetSymbol(i)) { double TP=PositionGetDouble(POSITION_TP); double PriceCurrent=PositionGetDouble(POSITION_PRICE_CURRENT); double PriceOpen=PositionGetDouble(POSITION_PRICE_OPEN); if((PriceCurrent>PriceOpen+((TP-PriceOpen)*SecureTheDeal) && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) || (PriceCurrent<PriceOpen+((TP-PriceOpen)*SecureTheDeal) && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)) trade.PositionModify(PositionGetTicket(i),PriceOpen+((TP-PriceOpen)*SecureTheProfit),TP); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double LastProfit() { double LastProfit=0; HistorySelect(0,TimeCurrent()); for(int i=0; i<HistoryDealsTotal()-PositionsTotal(); i++) LastProfit=HistoryDealGetDouble(HistoryDealGetTicket(i),DEAL_PROFIT); return LastProfit; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int ConsecutiveTrade() { double ConsecutiveWins=0; for(int i=HistoryDealsTotal()-PositionsTotal(); i>=0; i--) { if(HistoryDealGetDouble(HistoryDealGetTicket(i),DEAL_PROFIT)<0 || ConsecutiveWins>MaximumConsecutiveWins+MinimumConsecutiveWinsToResetRisk) break; ConsecutiveWins+=0.5; } double ConsecutiveLosses=0; for(int i=HistoryDealsTotal()-PositionsTotal(); i>=0; i--) { if(HistoryDealGetDouble(HistoryDealGetTicket(i),DEAL_PROFIT)>0) break; ConsecutiveLosses+=0.5; } return ConsecutiveWins-ConsecutiveLosses; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int PositionsForThisCurrencyPair() { int PositionsForThisCurrencyPair=0; for(int i=PositionsTotal(); i>=0; i--) if(_Symbol==PositionGetSymbol(i)) PositionsForThisCurrencyPair++; return PositionsForThisCurrencyPair; } //+------------------------------------------------------------------+
Quote
Report
waddah attar · External communityPost link
External answer — Stack Overflow Stack Exchange Author: waddah attar Original post: https://stackoverflow.com/a/69120720 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. you can use global variables to read/write signal information between EA and indicator
Quote
Report

Post Reply

Quoted from Forex.com.bd-Editorial External answer — Stack Overflow Stack Exchange Author: waddah attar Source score (net votes, not local likes): -1 Original post: https://stackoverflow.com/a/69120720 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. you can use global variables to read/write signal information between EA and indicator

Cancel quote

Checking account access…
how i get information from the indicator signs I used in mql4 | Forex.com.bd