Help: How to write simple EA to buy and sell at a specific time? - page 9

 
luxinterior:
I've answered a few of your questions before. It looked like your were trying to write you own which is great. What's the problem you're having with this one? Lux

Thank you for helping. I'm not sure how to set it up to open One BuySop and One SellStop at the same time based on the medium price value of the previous candle.

What is wrong with my BuyStop order?

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Distance,Slippage,Ask+StopLoss*Point+Distance,Bid-TakeProfit*Point-Distance,"",MagicNumber,0,Red);

I get invalid Stoploss

 
matrixebiz:
Thank you for helping. I'm not sure how to set it up to open One BuySop and One SellStop at the same time based on the medium price value of the previous candle.

What is wrong with my BuyStop order?

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Distance,Slippage,Ask+StopLoss*Point+Distance,Bid-TakeProfit*Point-Distance,"",MagicNumber,0,Red);

I get invalid Stoploss

Guess that your "distance" is a number of pips like 50. If so, you must *Point in order to add it to any price value.

FerruFx

 
FerruFx:
Guess that your "distance" is a number of pips like 50. If so, you must *Point in order to add it to any price value. FerruFx

Can you guys check this EA, in tester I don't see it opening both Buy and Sell at the same time ?? And I don't think the CloseHour set in my order function command for order Expiration is working.

I can't get it to open two orders at the same time? One BuyStop and One SellStop

Thanks

Files:
 
proverbs:
This one will do what I think your looking for.

Hope this helps.

gbp9am.mq4

This EA does open Two orders at the specified time but what is all this for;

extern int take_profit = 100;//default 40;

extern int open_long = 23;//default 18; current is 15 + spread(4)

extern int open_short = 20;//default 22; current is 15

extern int stop_long = 30;//default 22; current is 20

extern int stop_short = 30;//default 18; current is 20 + spread(4)

Don't need it all. Can someone clean it up a bit. Just have it open the Buy/Sell Stop orders at a certain time and pip gap, and set a pending order expire of a couple hours.

Thanks

 

CurrentTime() - OrderClosetime() problem

I'm having some problems getting my EA to wait a specific period of time between trades. I know I'm supposed to use the two variables listed above but i can't get it to work properly (especially in back tests). I know I'm not referencing previously closed orders correctly.

If anyone can help me insert the proper code i would greatly appreciate it.

Thank you in advance for any help.

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 0.1;

extern int Slippage = 0;

extern bool UseStopLoss = True;

extern int StopLoss = 30;

extern bool UseTakeProfit = True;

extern int TakeProfit = 5;

extern bool UseTrailingStop = False;

extern int TrailingStop = 30;

extern string hd = " --Delay time--";

extern int useDelay = 1;

extern int useDelayAfterWin = 1;

extern int MinutesToDelay = 180;

int BarCount;

int Current;

bool TickCheck = False;

// expert initialization function

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

// expert deinitialization function

int deinit() {

return(0);

}

// expert start function

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

// Variable Begin

double Var1 = iBullsPower(NULL, 0, 13, PRICE_CLOSE, Current + 0);

double Var2 = iBullsPower(NULL, 0, 13, PRICE_CLOSE, Current + 1);

double Var3 = iBullsPower(NULL, 0, 13, PRICE_CLOSE, Current + 2);

double Var4 = iBearsPower(NULL, 0, 13, PRICE_CLOSE, Current + 0);

double Var5 = iBearsPower(NULL, 0, 13, PRICE_CLOSE, Current + 1);

double Var6 = iMACD(NULL, 0, 12, 20, 9, PRICE_CLOSE, MODE_MAIN, Current + 0);

double Var7 = iMACD(NULL, 0, 12, 20, 9, PRICE_CLOSE, MODE_MAIN, Current + 1);

double Var8 = iMACD(NULL, 0, 12, 20, 9, PRICE_CLOSE, MODE_MAIN, Current + 2);

double Var9 = iCCI(NULL, 0, 14, PRICE_CLOSE, Current + 0);

double Var10 = iCCI(NULL, 0, 14, PRICE_CLOSE, Current + 1);

double Var11 = iCCI(NULL, 0, 14, PRICE_CLOSE, Current + 2);

double Var12 = iCCI(NULL, 0, 14, PRICE_CLOSE, Current + 3);

double Buy1_1 = Var1 ;

double Buy1_2 = 0;

double Buy2_1 = Var1 ;

double Buy2_2 = Var2 ;

double Buy3_1 = Var2 ;

double Buy3_2 = -0.0003;

double Buy4_1 = Var3 ;

double Buy4_2 = -0.0008;

double Buy5_1 = Var4 ;

double Buy5_2 = 0;

double Buy6_1 = Var5 ;

double Buy6_2 = 0;

double Buy7_1 = Var6 ;

double Buy7_2 = Var7 ;

double Buy8_1 = Var7 ;

double Buy8_2 = Var8 ;

double Buy9_1 = Var9 ;

double Buy9_2 = 100;

double Buy10_1 = Var9 ;

double Buy10_2 = Var10 ;

double Buy11_1 = Var10 ;

double Buy11_2 = Var11 ;

double Buy12_1 = Var1 ;

double Buy12_2 = 0.006;

double Buy13_1 = Var2 ;

double Buy13_2 = Var3 ;

double Buy14_1 = Var4 ;

double Buy14_2 = Var5 ;

double Buy15_1 = Var2 ;

double Buy15_2 = 0.06;

double Buy16_1 = Var11;

double Buy16_2 = Var12;

double CloseBuy1_1 = Var3 ;

double CloseBuy1_2 = Var2 ;

double CloseBuy2_1 = Var2 ;

double CloseBuy2_2 = Var1 ;

double CloseBuy3_1 = 100;

double CloseBuy3_2 = Var9 ;

// Variable End

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

// Signal Begin(Exit Buy)

if (CloseBuy1_1 > CloseBuy1_2 && CloseBuy2_1 > CloseBuy2_2 && CloseBuy3_1 > CloseBuy3_2) Order = SIGNAL_CLOSEBUY;

// Signal End(Exit Buy)

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

// Signal Begin(Exit Sell)

// Signal End(Exit Sell)

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

// Signal Begin(Entry)

if (Buy1_1 >= Buy1_2 && Buy2_1 > Buy2_2 && Buy3_1 > Buy3_2 && Buy4_1 >= Buy4_2 && Buy5_1 > Buy5_2 && Buy6_1 > Buy6_2 && Buy7_1 >= Buy7_2 && Buy8_1 >= Buy8_2 && Buy9_1 >= Buy9_2 && Buy10_1 >= Buy10_2 && Buy11_1 > Buy11_2 && Buy12_1 Buy13_2 && Buy14_1 > Buy14_2 && Buy15_1 Buy16_2) Order = SIGNAL_BUY;

// Signal End

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

 
jrwent:
I'm having some problems getting my EA to wait a specific period of time between trades. I know I'm supposed to use the two variables listed above but i can't get it to work properly (especially in back tests). I know I'm not referencing previously closed orders correctly.

If anyone can help me insert the proper code i would greatly appreciate it.

Thank you in advance for any help.

Hi,

I moved your post to this thread. I think the subject match with your question and maybe you could find some answer.

 
 
Rengoku:
I got this script but would like it to be able to place trades at specific times (but also would like to be able to just run the script without the timer… sort of like timer=0 or something) to play London open… without needing to wake up.

Also, how easy would it be to put in a couple of other functions? Like moving the stop to break even at something like 5 pips… possibly a built in trailingstop possibly?

I appreciate everyone’s time looking into this! I'm learning to code but honestly… I'm not that good at it!

As always... I appreciate your help!!

here is the code…

Post moved to this thread. I hope you'll find what you need.

 

Great ea with no indicator

Hello all,

I have no experience with programming but with trading.

Is there a EA Programmer who can make me a EA that opens on a specific time a sell and a buy market order.

EA should have following settings:

extern TimeToTrades = 01:00

extern StopLoss = 50

extern TakeProfit = 50

extern TrailingStop = 35

I think its very easy to code this if you have a little bit of MQL4 knowedge...

Would be great for a great System!

Help me to do it and i ll share with you the profitable method.

Regards

MisterFX

 

something like this

extern double TakeProfit = 50;

extern double StopLoss = 50;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double TimeToTrade=01:00;

//+------------------------------------------------------------------+

//| |

//+------------------------------------------------------------------+

int start()

{

If(Time == TimeToTrade)

OrderSend(BUY,1 lot, TakeProfit, StopLoss)

OrderSend(SELL,1 lot, TakeProfit, StopLoss)

}

}

}

return(0);

}

Thats all

I know this code will never work please fix that it works

regards

Reason: