Hello friends, I need that mi indicator close operations. I don´t where ir the error
Files:
mlades.png
79 kb
- Indicators MTF
- Multi Timeframe Indicators
- Coding help
danielocash:
Hello friends, I need that mi indicator close operations. I don´t where ir the error
Hello friends, I need that mi indicator close operations. I don´t where ir the error
1. indicators don't open/close positions.
2. what you're coding is actually an EA.
3. the errors tab of toolbox, bottom of screen, helps you find the parts of code, which could be cause of errors.
4. it says your operations are independent of the variable price.
//+------------------------------------------------------------------+ //| Strategy: Ea-Diamondclose.mq4 | //| Created with EABuilder.com | //| http://eabuilder.com | //+------------------------------------------------------------------+ #property copyright "Created with EABuilder.com" #property link "http://eabuilder.com" #property version "1.00" #property description "" #include <stdlib.mqh> #include <stderror.mqh> int LotDigits; //initialized in OnInit int MagicNumber = 628383; double TradeSize = 0.1; int MaxSlippage = 3; //adjusted in OnInit bool crossed[2]; //initialized to true, used in function Cross double myPoint; //initialized in OnInit bool Cross(int i, bool condition) //returns true if "condition" is true and was false in the previous call { bool ret = condition && !crossed[i]; crossed[i] = condition; return(ret); } void myAlert(string type, string message) { if(type == "print") Print(message); else if(type == "error") { Print(type+" | Ea-Diamondclose @ "+Symbol()+","+Period()+" | "+message); } else if(type == "order") { } else if(type == "modify") { } } void myOrderClose(int type, int volumepercent, string ordername) //close open orders for current symbol, magic number and "type" (OP_BUY or OP_SELL) { if(!IsTradeAllowed()) return; if (type > 1) { myAlert("error", "Invalid type in myOrderClose"); return; } bool success = false; int err; string ordername_ = ordername; if(ordername != "") ordername_ = "("+ordername+")"; int total = OrdersTotal(); for(int i = total-1; i >= 0; i--) { while(IsTradeContextBusy()) Sleep(100); if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if(OrderMagicNumber() != MagicNumber || OrderSymbol() != Symbol() || OrderType() != type) continue; while(IsTradeContextBusy()) Sleep(100); RefreshRates(); double price = (type == OP_SELL) ? Ask : Bid; double volume = NormalizeDouble(OrderLots()*volumepercent * 1.0 / 100, LotDigits); if (NormalizeDouble(volume, LotDigits) == 0) continue; success = OrderClose(OrderTicket(), volume, NormalizeDouble(price, Digits()), MaxSlippage, clrWhite); if(!success) { err = GetLastError(); myAlert("error", "OrderClose"+ordername_+" failed; error #"+err+" "+ErrorDescription(err)); } } string typestr[6] = {"Buy", "Sell", "Buy Limit", "Sell Limit", "Buy Stop", "Sell Stop"}; if(success) myAlert("order", "Orders closed"+ordername_+": "+typestr[type]+" "+Symbol()+" Magic #"+MagicNumber); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //initialize myPoint myPoint = Point(); if(Digits() == 5 || Digits() == 3) { myPoint *= 10; MaxSlippage *= 10; } //initialize LotDigits double LotStep = MarketInfo(Symbol(), MODE_LOTSTEP); if(LotStep >= 1) LotDigits = 0; else if(LotStep >= 0.1) LotDigits = 1; else if(LotStep >= 0.01) LotDigits = 2; else LotDigits = 3; int i; //initialize crossed for (i = 0; i < ArraySize(crossed); i++) crossed[i] = true; return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { int ticket = -1; double price; //Close Long Positions, instant signal is tested first if(Cross(1, iCustom(NULL, PERIOD_CURRENT, "MegaFx", false, false, "alert.wave", false, 2, 0) < -0.0001) //MegaFx crosses below fixed value ) { if(IsTradeAllowed()) myOrderClose(OP_BUY, 100, ""); else //not autotrading => only send alert myAlert("order", ""); } //Close Short Positions, instant signal is tested first if(Cross(0, iCustom(NULL, PERIOD_CURRENT, "MegaFx", false, false, "alert.wave", false, 1, 0) > +0.0001) //MegaFx crosses above fixed value ) { if(IsTradeAllowed()) myOrderClose(OP_SELL, 100, ""); else //not autotrading => only send alert myAlert("order", ""); } } //+------------------------------------------------------------------+That is code,but Don´t close orders. a few days ago the Ea did it well, I do not know where I modified it
-
Why did you post your MT4 question in the
Root /
MT5 EA section
instead of the
MQL4 section, (bottom of the Root page?)
General rules and best pratices of the Forum. - General - MQL5 programming forum
Next time post in the correct place. The moderators have already moved will likely move this thread there soon. - Use the debugger or print out your variables, including _LastError and prices and find out why.

You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register