Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
RTS ea 1[1]
//+------------------------------------------------------------------+
//| RTS 1.1.2.mq4 |
//| by TaXiRaN |
//| No Copyright, created 2 Jun 2006, Open Source |
//| http://www.forex-tsd.com |
//| Freely receive, Freely give. Please post updated version. |
//+------------------------------------------------------------------+
#property copyright "Created in 2006, Open Source Project by TaXiRaN"
#property link "http://www.forex-tsd.com"
extern int idBASE = 100000; // Change this number if running more than one EA on the same pair.
extern double Lots = 0.10;
extern int TakeProfit = 80;
extern int InitialStop = 20;
extern bool Alerts = true;
extern string StepStops = "Trailing Stops Options";
extern bool UseStepStops = false; // This will use the StepStops() Function.
extern int BreakEven = 10; // Move StopLoss to Order Open Price.
extern int TSactivation = 5; // TSactivation will set the point where the Trailing will start.
extern int StepSize = 5;
extern int MinDistance = 10; // Min Distance between StopLoss and Market Price.
extern bool CheckExit = true; //
extern string TimeTrade = "An Options For Using Hour Trade";
extern bool UseHourTrade = false; // Time Filter.
extern int FromHourTrade = 1; // Start Trading on this Hour.
extern int ToHourTrade = 11; // End Trading on this Hour.
int ID;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init(){
ID=idBASE;
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
if (UseStepStops){
if (ExistPositions()){
StepStops();
}
}
if (UseHourTrade){
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)){
Comment("\n|| Out of Trading Time");
return(0);
}
}
if(AccountFreeMargin()<(1000*Lots)){
Comment("\n|| Free Margin = ",AccountFreeMargin(),"\n|| We have no money.");
return(0);
}
if (!ExistPositions()){
CheckOpen();
}
if (CheckExit && ExistPositions()){
CheckExit();
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
void CheckOpen() {
if (Juice() ==1){
if (StopReversal() ==1 && CoG() ==1){ // up trend for BUY signal.
OpenBuy();
return(0);
}
if (StopReversal() ==2 && CoG() ==2){ // down trend for SELL signal.
OpenSell();
return(0);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
int CheckExit() {
if (OrderType()==OP_BUY){
if (Juice() ==2 || CoG() ==2){
OrderClose(OrderTicket(),OrderLots(),Bid,2,Aqua);
}
}
if (OrderType()==OP_SELL){
if (Juice() ==2 || CoG() ==1){
OrderClose(OrderTicket(),OrderLots(),Ask,2,Magenta);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
int Juice() {
double Juice0=iCustom(NULL,15,"Juice",7,0.0004,0,0);
double Juice1=iCustom(NULL,5,"Juice",7,0.0004,0,0);
if (Juice0>0.0006 && Juice1>0.0004) return(1); // Trend
if (Juice0<0.0006 && Juice1<0.0004) return(2); // Rang
}
//////////////////////////////////////////////////////////////////////////////////////////////
int StopReversal() {
int bars=Bars;
for (int i=0; i<=bars; i++){
bool up = iCustom(NULL,5,"StopReversal",0.001,0,i);
bool dw = iCustom(NULL,5,"StopReversal",0.001,1,i);
if (up==true){
return(1);
break;
}
if (dw==true){
return(2);
break;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
int CoG() {
double CoG1=iCustom(NULL,15,"Center of Gravity",10,200,0,0); // Green Line
double CoG2=iCustom(NULL,15,"Center of Gravity",10,200,1,0); // Red Line
if (CoG1>CoG2) return(1); // UP
if (CoG1<CoG2) return(2); // DOWN
}
//////////////////////////////////////////////////////////////////////////////////////////////
void OpenBuy() {
double sl, tp;
string Comm;
bool OB;
sl = MarketInfo(Symbol(),MODE_ASK)-InitialStop*Point;
tp = MarketInfo(Symbol(),MODE_ASK)+TakeProfit*Point;
Comm = "[RTS 1.1.2]"+" - "+ID;
OB = OrderSend(Symbol(),OP_BUY,Lots,Ask,2,sl,tp,Comm,ID,0,DeepSkyBlue);
if (OB && Alerts) Alert("[RTS 1.1.2] - Buy Signal on ",Symbol());
}
//////////////////////////////////////////////////////////////////////////////////////////////
void OpenSell() {
double sl, tp;
string Comm;
bool OS;
sl = MarketInfo(Symbol(),MODE_BID)+InitialStop*Point;
tp = MarketInfo(Symbol(),MODE_BID)-TakeProfit*Point;
Comm = "[RTS 1.1.2]"+" - "+ID;
OS = OrderSend(Symbol(),OP_SELL,Lots,Bid,2,sl,tp,Comm,ID,0,Magenta);
if (OS && Alerts) Alert("[RTS 1.1.2] - Sell Signal on ",Symbol());
}
//////////////////////////////////////////////////////////////////////////////////////////////
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==ID) {
return(true);
}
}
}
return(false);
}
//////////////////////////////////////////////////////////////////////////////////////////////
void StepStops() {
bool BE=false;
double BuyStop, SellStop;
int total=OrdersTotal(), k, digit=MarketInfo(Symbol(), MODE_DIGITS);
for (int cnt=0; cnt<total; cnt++){
OrderSelect(cnt, SELECT_BY_POS);
int mode=OrderType();
if (OrderSymbol()==Symbol() && OrderMagicNumber()==ID){
if (mode==OP_BUY){
BuyStop = OrderStopLoss();
if (Bid-OrderOpenPrice()>0 || OrderStopLoss()==0){
if (Bid-OrderOpenPrice()>=BreakEven*Point && !BE){
BuyStop = OrderOpenPrice();
BE=true;
}
if (OrderStopLoss()==0){
BuyStop = OrderOpenPrice()-InitialStop*Point;
k = 1;
BE=false;
}
if (Bid-OrderOpenPrice()>=TSactivation*Point){
if (Bid-OrderOpenPrice()>=k*StepSize*Point){
BuyStop = OrderStopLoss()+StepSize*Point;
if (Bid-BuyStop>=MinDistance*Point){
BuyStop = BuyStop;
k = k+1;
}else
BuyStop = OrderStopLoss();
}
}
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(BuyStop, digit),OrderTakeProfit(),0,LightGreen);
return(0);
}
}
if (mode==OP_SELL){
SellStop = OrderStopLoss();
if (OrderOpenPrice()-Ask>0 || OrderStopLoss()==0){
if (OrderOpenPrice()-Ask>=BreakEven*Point && !BE){
SellStop = OrderOpenPrice();
BE=true;
}
if (OrderStopLoss()==0){
SellStop = OrderOpenPrice()+InitialStop*Point;
k = 1;
BE=false;
}
if (OrderOpenPrice()-Ask>=TSactivation*Point){
if (OrderOpenPrice()-Ask>=k*StepSize*Point){
SellStop = OrderStopLoss()-StepSize*Point;
if (SellStop-Ask>=MinDistance*Point){
SellStop = SellStop;
k = k+1;
}else
SellStop = OrderStopLoss();
}
}
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SellStop, digit),OrderTakeProfit(),0,Yellow);
return(0);
}
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
ñ×ußLª@N0uýO<[2&;Q H+ûuú\7Ë@¸o¯Ó¸½K®SJ¹Q8R.EøTöN÷}.;YV(µÉ·Mþ!ñRáé
Ìð£</hIôQ®nLeu}7àæÍ¥#»´¿¡¼N,kKÈɺ0ÄBróó
øD¤÷¤óý7¥ b®ûãù¤ï((Ë_¹jêZã¶¢
@êbÖµ-ãÊvMât÷ÎËýÊo¸8ÿüõ¸Fî×Ò£ªk{¸;¥ø_`§ÞrPuè¡Æ½Þy²<«Q«z!G"o¿þPÍ7éðüÇÍG)9y~FEU`Õײ9n(ùQÈ®²Ï'£KVËÍy¥¹Òx¢7èv 88¨üDõÅa
4):õ?$ø#%MrEÆyq5¨¥.´½Øw±KbxV/+º¯wXº¥Þ·Àp¶ìA.ϪZ¹ónñ pÎï#Å7iOÀñ@²t
ÀPÔ2yÇá|âÀ½Ê+ôí¡uOË ¬³ÔÒrÿÅ<$p]òÈæèVø]ÔMá°æ¸çV\6Îýë
¥ ßïïп°mÿmÉIáU!#Oôc<ÞååX]Ì8û[öáÉa§ÍÉyäç¡ëøÎ0ˬ]À8çäNYJÐ_ñMÞNüÌc©M9¦FŰ
Îl{=7 [Ub';"z¡²kÕ6vÏ×)`öï¹dÌ¿t¸SêÛyJ|ymO[Ò©³¼Gfqc^¨J)gÓ{O]Àϧ5%aÈ»,U¢{))¼WÏ>Ê\m;LT»Ôm Z¹ììZ"å?%
è.|6¦Gþ
;næ5+¸çIªS}6½º*lñy²cä§×ø·+ô³AÃ÷7eq(£i0¯æ¡jñ è¨ttÞ¡Mþ$ì)Í¢îÒz¼ÈUð³ô?ÀÉÀÈ[³â¶ÝÅàvÊlkÆìVÍöôü.ÐMá,Røî꽫D®å²û«kR%5çÕ"wÝO½yø3ÁæÈ "¹8üJø¢6?%Q<Ô*/]]ÚET>Ãïí:+XÄÇZB)[¶O y¨¯~rÛ´H±Jç³áÈ;n2C45tÚÄÏÁVED~ëø(§E_Oë1=2_»·yñÍMYÜ;dGhë*Oª]<º[W7·Û89ÅJn¶xrQ_-õHãwgMb¨1bÓÖ*Úö=8?÷ Õ>OçÜÉrüÞu¯H.õr»¸VaײP¾sRëWÛÍ~ZÈv
½Ã¿ë/z}ò}UÛÙ=Æ=zt¦Ç£!ùCì5{À!vÓ2/õ'U*Ó_~ümjË/,K?x½à.Ù6£åYïÝk
O6¦:ßâoÀ=mû¬Îz\³?r ±úé¶eú,2XûÓ¼[ó"<
¡Ó<éMßxQ§öõzÅ+«ëô:ëåïÚ!Õó¦´8§IÇ|H°×ЧÈa'`m9l
¤H¦_ÅKmø¹!@åÈÑ0¦HãÚÖ4] Ú!¿ålE¡ åJËÙ×¢1Ù3ø+\ó
]ð*w3)@.ÏêÇÏÂ2
· ¸J\©:ئ<øGÿïú¯ü?4Sd2m¶Òö?RÐ6²¶¨Ë,#ªËÖÒ·iR|´-XÏM0â²Wì:£¥]rrÁà¥Y#¤ZRäV?æ/ÒÞÆ³QîÓ{¾Ó_ÙÁMg:®Ý>ÿÇvû=?±óñøµÇMânÏNGbqf-niáê/v¯À/dz\<3©'Eé$ºÄÍóIÕÙô6\Ä|X%ÁÑÛÎ]/!À×]Âð·î¾,i$!_@~W©sº)ÎU«>Ûá°Çj¹5ÁÏáäYQ©¢VÔéwV³
[!_¬ø¨àV´d¤C2ÐÙÇ`x~ÚZ£éþ0à£qTÄ Ë¼¶¬Aø§c43
tmD"SÈ mNj%þë¼Gâ»ÎÓºUNõPsø{à é
Ûê±µRëqÀ-©Y«%Y µwWQ K¤bÅí±éNì_<ï ½_×<e##¦)ضi"