double SellStopLoss = Bid - (StopLoss * CalcPoint1); double SellTakeProfit = Bid + (TakeProfit * CalcPoint1);
Swap the + and -
Swap the + and -
Thank you for rectifying it.
I changed it but now its creating one buy & one sell order on each bar from same level?
bool can_buy=true; bool can_sell=true; for(int x=OrdersTotal()-1;x>=0;x--) { if(OrderSelect(x,SELECT_BY_POS) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) can_buy=false; if(OrderType()==OP_SELL) can_sell=false; } } if(can_buy) { //Check whether to place order } if(can_sell) { //Check whether to place order }
It is not clear what you want. The above code or modification of it should help you.
// Orders-----------------------------in start function
Do you have both start() and OnTick in your code??
It is not clear what you want. The above code or modification of it should help you.
Do you have both start() and OnTick in your code??
Thank GumRai for sharing the code. I will apply it today..
But yes I have both start & Ontick function in my code..I really confuse about the ontick function...Previously I added buy sell orders inside the start() function..but was creating buy sell order on each tick...That's why I created separated ontick function .
I don't know what conflicts may occur by having both. In my opinion it is best just to use OnTick
In the start function it need to run tick by tick cause it fetches data from a csv file.
I am here sharing the whole code..please help me to make it working...Currently it stuck after taking one trade.
int init() { int CalcDigits = (int)MarketInfo(Symbol(),MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 4) CalcSlippage = SlippagePips; else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10; if(CalcDigits == 2 || CalcDigits == 3) CalcPoint1 = 0.01; else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint1 = 0.0001; UsePoint = CalcPoint; UseSlippage = (int) CalcSlippage; return (0); } //------------------------------------------------------------------- int start() // Spec. function start() { //--------------------------------------------------------------- 2 -- int Handle; // File descriptor string File_Name="H.csv", // Name of the file D1, // Data Str_DtTm; // Date and time of the event (line) datetime Dat_DtTm; // Date and time of the event (date) double DD1; // Data Converted //--------------------------------------------------------------- 3 -- Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,",");// File opening if(Handle<0) // File opening fails { if(GetLastError()==4103) // If the file does not exist,.. Alert("No file named ",File_Name);//.. inform trader else // If any other error occurs.. Alert("Error while opening file ",File_Name);//..this message PlaySound("Bzrrr.wav"); // Sound accompaniment return(0); // Exit start() } //--------------------------------------------------------------- 4 -- while(FileIsEnding(Handle)==false) // While the file pointer.. { // ..is not at the end of the file //--------------------------------------------------------- 5 -- Str_DtTm =FileReadString(Handle);// Date and time of the event (date) D1 =FileReadString(Handle); if(FileIsEnding(Handle)==true) // File pointer is at the end break; // Exit reading and drawing //--------------------------------------------------------- 6 -- Dat_DtTm =StrToTime(Str_DtTm); // Transformation of data type DD1 = floor(StrToDouble(D1)); //------------------------------------------------------ Pricing double CalcDigits = MarketInfo(Symbol(),MODE_DIGITS); { if(CalcDigits == 2 || CalcDigits == 3) CalcPoint = 100; else if (CalcDigits == 4 || CalcDigits == 5) CalcPoint = 10000; } double j = iOpen(Symbol(), PERIOD_D1, iBarShift(Symbol(),PERIOD_D1, Dat_DtTm)); double SK = floor((36*Scale)); double k = floor(round((j*CalcPoint))/SK); double L1 = ((k * SK)+ floor((DD1 * Scale)))/CalcPoint; // Orders----------------------------- if(TimeCurrent() == Dat_DtTm) { double T1 = L1; for(int x=OrdersTotal()-1;x>=0;x--) { if(OrderSelect(x,SELECT_BY_POS) && OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) can_buy=false; if(OrderType()==OP_SELL) can_sell=false; } } //---------------------------------------- if(can_buy) { if(Close[1]> T1 ) { double BuyStopLoss = Ask - (StopLoss * CalcPoint1); double BuyTakeProfit = Ask + (TakeProfit * CalcPoint1); BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,Ask,UseSlippage,BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green); } } //-------------------- if(can_sell) { if(Close[1]< T1 ) { double SellStopLoss = Bid + (StopLoss * CalcPoint1); double SellTakeProfit = Bid - (TakeProfit * CalcPoint1); SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,Bid,UseSlippage,SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red); } } ///------------------------ } //-----------------end of orders } //--------------------------------------------------------------- 8 -- FileClose( Handle ); // Close file PlaySound("bulk.wav"); // Sound accompaniment WindowRedraw(); // Redraw object return(0); // Exit start() } //------------------------------------------------------------
In the start function it need to run tick by tick cause it fetches data from a csv file.
I am here sharing the whole code..please help me to make it working...Currently it stuck after taking one trade.
You're fortunate that it takes 1 trade
if(TimeCurrent() == Dat_DtTm)
If there are irregular ticks this may never be true.
If it is true and a trade is opened, it will not be true again unless the value is changed in the file. So no 2nd trade opened.
You're fortunate that it takes 1 trade
if(TimeCurrent() == Dat_DtTm)
If there are irregular ticks this may never be true.
If it is true and a trade is opened, it will not be true again unless the value is changed in the file. So no 2nd trade opened.
I added that code because on my CSV file there are two column: One is Date & 2nd one is Data (with which we will be calculating level for entries).
If Current date get matches with with CSV data "Date column" then it takes the "Data" & calculate the level for trade entries & trades it.
Then how can I do this?
Thanks..
Any Highlight on this thread...?
I declared them locally.
bool can_buy=true; bool can_sell=true;
How to compare two dates on mql4. Current date with the date fetched from csv file?
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello members,
Looking for a help for making an EA.
I have Ea which opens buy order if last candle closes above Trade level.
It opens sell order if last candle closes below the trade level.
Suppose I run this on an hourly chart, then every time this condition satisfies it opens buy or sell order on each hour. But I want only one trade to open.
There should not be any new order until current buy/sell order get closed?
How can I do that?
Plus in the code below..it takes only buy order no sell order..