Would anyone know how to place a limit order at a specific price? I'm trying to place them one pip above and/or below current price. Not having much luck. Thanks!
double SpreadA = (Ask - Bid);
double M=((Bid+SpreadA)+1*Point)
TakeTPB = (Bid+15*Point);
Order = OrderSend(Symbol(),OP_BUYLIMIT,Lot,M,2,0,TakeTPB);That is one point not one pip
These are the rules for orders opening prices :
Buy
[/TD] | Ask
[/TD] | Bid
[/TD] | [/TD] | [/TD]
[/TR] |
Sell
[/TD] | Bid
[/TD] | Ask
[/TD] | [/TD] | [/TD]
[/TR] |
BuyLimit
[/TD] | [/TD] | [/TD] | Below the current Ask price[/TD] | Ask price reaches open price | [TD] [TD]Above the current Bid price [TD]Bid price reaches open price |
I've managed to get buy and sell limit orders to open, but not buy and sell stop orders. Can you tell me what I'm doing wrong?
//+------------------------------------------------------------------+
//| Custom_Test.mq4 |
//| me |
//| Non-Existent Domain |
//+------------------------------------------------------------------+
#property copyright "me"
#property link "http://"
extern string Settings_n_1 = "--------------------------";
extern int Side = 1;
extern int MP_Y = 0;
extern int MP_X = 0;
int total, Ticket, Total, i, T, Buy = 0, Sell = 0, ZBLa, ZSLa, ZBLb, ZSLb, ZBLc, ZSLc, ZBLd, ZSLd, ZBLe, ZSLe, ZBLf, ZSLf, ZBLg, ZSLg, ZBLh, ZSLh, ZBLi, ZSLi, ZBLj, ZSLj, DNew, DOld, XHLB, XHLS, HLB, HLS, PB, PS, TB, TS, Tt, Bx = 0, Sx = 0, BLx = 0, SLx = 0, oBLx, oSLx, Ttx, Tx = 0, Bnx = 0, Snx = 0, Ttnx, PCNT =0, Cnt = 0, N = 0, BZ = 0, SZ = 0, BL = 0, SL = 0, TL = 0, CountZ, Count, oCount, CountX = 0, S, VH, VL, TVL, BFirstTicket, BFirstTicketI, BSecondTicket, SFirstTicket, SFirstTicketI, SSecondTicket, HighPoint = 0, LowPoint = 0, AU, AD, YU, YD, YUO, YDO, Tick = 0, LTM = 0, SLTM = 0, SAU = 0, SAD = 0, TAU, TAD, CNG, LCNG, XCNG, FXx, Xx, ZCNT = 0, ncenter, ocenter, CAy = 0, CBy = 0, CCy = 0, CDy = 0, CEy = 0, CFy = 0, CAz = 0, CBz = 0, CCz = 0, CDz = 0, CEz = 0, CFz = 0;
double vO, vH, vL, dB, dS, VX, VXb, SPDz, hSPDz, lSPDz, Lot, LotI, bid, ask, obid, oask, Mbx, Msx, Mmx, BStart, SStart, BFin, SFin, BTotal, STotal, TTotal = 0, ZTotal = 0, XTotal, YTotal = 0, oopen, Oldopen, TakePB, TakePS, TakeTPB, TakeTPS, OTakePB, OTakePS, TakePBX, TakePSX, TakeHBX, TakeHSX, Spread, PnvH, PnvL, oPnvH, oPnvL, FirstHL, HDiff, LDiff, BDiff, SDiff, LMkr, HMkr, Vol, BFirstPrice, BFirstPriceI, BSecondPrice, BFirstProfit, BFirstProfitI, BSecondProfit, BOldProfit, SFirstPrice, SFirstPriceI, SSecondPrice, SFirstProfit, SFirstProfitI, SSecondProfit, SOldProfit, CurBProfit, CurtBProfit, CurSProfit, CurtSProfit, NewProfit, DayHighI, DayLowI, WeekHighI, WeekLowI, MonthHighI, MonthLowI, BY, SY, HL;
string text, ArrowUpA, ArrowDownA, ArrowUpB, ArrowDownB, ArrowUpC, ArrowDownC, ArrowUpD, ArrowDownD, ArrowUpE, ArrowDownE, OHday, UpSymbol="ñ", DnSymbol="ò", NtSymbol="«";
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{ObjectsDeleteAll();
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
bool Order, Modify;
Lot = 0.01;
Ticket = OrderTicket();
Total = OrdersTotal();
Spread = ((Ask - Bid)*100000);
double SpreadA = (Ask - Bid);
Tick = Tick + 1;
double vC=iClose(NULL,5,0); // 5 Minute Close
double M=(Bid+0.00001); // BUY Limit Price
double Nx=(Ask-0.00001); // SELL Limit Price
double MS=(Ask-0.00001); // SELL Stop Price
double NS=(Bid+0.00001); // BUY Stop Price
// ------------------------------------------------------------------------------ OPEN BUY -------------
Alert("OPEN BUY STOP");
Alert("Attempt to Open BUY Stop. Waiting for Response...");
//Alert(" Spread = " + DoubleToStr(NormalizeDouble(Spread,5),0));
// Alert(" SpreadA = " + DoubleToStr(SpreadA,Digits));
// Open Bracket 2
RefreshRates();
//T = T-1;
double TakeTPBS = (Bid+0.00002);
Alert("Take Profit = ",DoubleToStr(TakeTPBS,Digits));
Order = OrderSend(Symbol(),OP_BUYSTOP,Lot,MS,2,0,TakeTPBS);
Tt = GetLastError();
if(Cnt > 2)
{Cnt = 0; return(0);}
if (Tt > 0)
{Order = false; Alert("Break Buy Here! ",Tt," Bid= ",DoubleToStr(Bid,Digits)," Ask= ",DoubleToStr(Ask,Digits)," MS = ",DoubleToStr(MS,Digits)," Nx = ",DoubleToStr(Nx,Digits)," T = ",T); Sleep (5999); RefreshRates(); Cnt = Cnt + 1;
Alert (GetLastError());}
if (OrderSelect(0, SELECT_BY_POS)==True)
{Buy = 1; // Open Bracket 3
Alert ("Opened - Buy Order ",OrderTicket()," TP = ",(DoubleToStr(TakeTPBS, Digits))," Ask = ",DoubleToStr(Ask,Digits)," MS = ",DoubleToStr(MS,Digits)," Nx = ",DoubleToStr(Nx,Digits)," T = ",T);
}
Alert("OPEN BUY LIMIT");
Alert("Attempt to Open BUY Limit. Waiting for Response...");
// Alert(" Spread = " + DoubleToStr(NormalizeDouble(Spread,5),0));
// Alert(" SpreadA = " + DoubleToStr(SpreadA,Digits));
// Open Bracket 2
RefreshRates();
//T = T-1;
TakeTPB = (Bid+0.00002);
Alert("Take Profit = ",DoubleToStr(TakeTPB,Digits));
Order = OrderSend(Symbol(),OP_BUYLIMIT,Lot,M,2,0,TakeTPB);
Tt = GetLastError();
if(Cnt > 2)
{Cnt = 0; return(0);}
if (Tt > 0)
{Order = false; Alert("Break Buy Here! ",Tt," Bid= ",DoubleToStr(Bid,Digits)," Ask= ",DoubleToStr(Ask,Digits)," M = ",DoubleToStr(M,Digits)," Nx = ",DoubleToStr(Nx,Digits)," T = ",T); Sleep (5999); RefreshRates(); Cnt = Cnt + 1;
Alert (GetLastError());}
if (OrderSelect(0, SELECT_BY_POS)==True)
{Buy = 1; // Open Bracket 3
Alert ("Opened - Buy Order ",OrderTicket()," TP = ",(DoubleToStr(TakeTPB, Digits))," Ask = ",DoubleToStr(Ask,Digits)," M = ",DoubleToStr(M,Digits)," Nx = ",DoubleToStr(Nx,Digits)," T = ",T);
}
Alert("OPEN SELL STOP");
Alert("Attempt to Open SELL Stop. Waiting for Response...");
// Alert(" Spread = " + DoubleToStr(NormalizeDouble(Spread,5),0));
// Alert(" SpreadA = " + DoubleToStr(SpreadA,Digits));
{
RefreshRates();
double TakeTPSS = (Ask-0.00002);
Order = OrderSend(Symbol(),OP_SELLLIMIT,Lot,NS,2,0,TakeTPS);
Tt = GetLastError();
if(Cnt > 2)
{Cnt = 0; return(0);}
if (Tt > 0)
{Order = false; Alert("Break Sell Here! ",Tt," Bid= ",DoubleToStr(Bid,Digits)," Ask= ",DoubleToStr(Ask,Digits)," M = ",DoubleToStr(M,Digits)," NS = ",DoubleToStr(NS,Digits)," T = ",T); Sleep (5999); RefreshRates(); Cnt = Cnt + 1;
Alert (GetLastError());}
if (OrderSelect(0, SELECT_BY_POS)==True)
{Sell = 1; // Open Bracket 3
Alert ("Opened - Sell Order ",OrderTicket()," TP = ",(DoubleToStr(TakeTPSS, Digits))," Bid = ",DoubleToStr(Bid,Digits)," M = ",DoubleToStr(M,Digits)," NS = ",DoubleToStr(NS,Digits)," T = ",T);
}
}
Alert("OPEN SELL LIMIT");
Alert("Attempt to Open SELL Limit. Waiting for Response...");
//Alert(" Spread = " + DoubleToStr(NormalizeDouble(Spread,5),0));
//Alert(" SpreadA = " + DoubleToStr(SpreadA,Digits));
{
RefreshRates();
TakeTPS = (Ask-0.00002);
Order = OrderSend(Symbol(),OP_SELLLIMIT,Lot,Nx,2,0,TakeTPS);
Tt = GetLastError();
if(Cnt > 2)
{Cnt = 0; return(0);}
if (Tt > 0)
{Order = false; Alert("Break Sell Here! ",Tt," Bid= ",DoubleToStr(Bid,Digits)," Ask= ",DoubleToStr(Ask,Digits)," M = ",DoubleToStr(M,Digits)," Nx = ",DoubleToStr(Nx,Digits)," T = ",T); Sleep (5999); RefreshRates(); Cnt = Cnt + 1;
Alert (GetLastError());}
if (OrderSelect(0, SELECT_BY_POS)==True)
{Sell = 1; // Open Bracket 3
Alert ("Opened - Sell Order ",OrderTicket()," TP = ",(DoubleToStr(TakeTPS, Digits))," Bid = ",DoubleToStr(Bid,Digits)," M = ",DoubleToStr(M,Digits)," Nx = ",DoubleToStr(Nx,Digits)," T = ",T);
}
}
// -------------------------------------------------------------------------------------------
return(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Would anyone know how to place a limit order at a specific price? I'm trying to place them one pip above and/or below current price. Not having much luck. Thanks!
double SpreadA = (Ask - Bid);
double M=((Bid+SpreadA)+1*Point)
TakeTPB = (Bid+15*Point);
Order = OrderSend(Symbol(),OP_BUYLIMIT,Lot,M,2,0,TakeTPB);