chipmunk186
Freshie
- Messages
- 13
- Joined
- Feb 8, 2011
- Messages
- 13
- Reaction score
- 0
- Points
- 3
Minta tolong tambahkan STOP LOSS leh x??
//+------------------------------------------------------------------+
//| Ikhram EA by Dzhini.mq4 |
//| Copyright © 2010, Gorbushin Grigory (Dzhini) |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Gorbushin Grigory (Dzhini)"
#property link "[email protected]"
int MAGICMA=23423423;
extern double Lot=0.1;
extern int TP=5;
extern int PendingDistance=10;
extern int TwoTriggerOneTP=1;
extern bool RiskMM=false;
extern double RiskPercent=10;
extern bool RestrictTime = false;
extern int HourStart = 0;
extern int MinuteStart = 0;
extern int HourStop = 24;
extern int MinuteStop = 0;
int resPending1,resPending2;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start()
{
if(Bars<100 && IsTradeAllowed()==false) return;
if(RiskMM)CalculateMM();
if(isTimeForTrade()&&NumberOfPositions(NULL,-1,MAGICMA)== 0&&ExistOrders(NULL,-1,MAGICMA,0)==0) {CheckForOpen();}
if(NumberOfPositions(NULL,-1,MAGICMA)== 0&&NumberOfOrders(NULL,-1,MAGICMA)==1){DeleteOrders(NULL,-1,MAGICMA);}
if(NumberOfPositions(NULL,-1,MAGICMA)== 1&&isCloseLastPosByTake(NULL,-1,MAGICMA)==true){ModifyOrderTP();}
return;
}
bool ExistOrders(string sy, int op, int mn, datetime ot) {
int i, k=OrdersTotal(), ty;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ty=OrderType();
if (ty>1 && ty<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
int NumberOfPositions(string sy, int op, int mn) {
int i, k=OrdersTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}
}
}
}
}
return(kp);
}
void CheckForOpen()
{
resPending1=OrderSend(Symbol(),OP_BUYSTOP ,Lot ,Ask+PendingDistance*Point,2,0,Ask+PendingDistance*Point+TP*Point,"",MAGICMA,0,Blue);
// while(!IsTradeAllowed()) Sleep(100);
resPending2=OrderSend(Symbol(),OP_SELLSTOP,Lot ,Bid-PendingDistance*Point,2,0,Bid-PendingDistance*Point-TP*Point,"",MAGICMA,0,Red);
// while(!IsTradeAllowed()) Sleep(100);
}
int NumberOfOrders(string sy, int op, int mn) {
int i, k=OrdersTotal(), ko=0, ot;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) ko++;
}
}
}
}
return(ko);
}
void DeleteOrders(string sy, int op, int mn)
{
int i, k=OrdersTotal(), ot;
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (OrderSymbol()==sy && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
OrderDelete(OrderTicket(), Yellow);
}
}
}
}
}
}
bool isCloseLastPosByTake(string sy, int op, int mn) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
void ModifyOrderTP()
{
double Price;
double Stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(CalculateCurrentOrders(Symbol())==1)
{
if (OrderSelect(resPending1,SELECT_BY_TICKET)==true)
if (OrderTakeProfit()!=OrderOpenPrice()+Point*TwoTriggerOneTP && (OrderOpenPrice()+Point*TwoTriggerOneTP-Ask)>Stoplevel*Point)
OrderModify(resPending1,OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+Point*TwoTriggerOneTP,0,Blue);
// while(!IsTradeAllowed()) Sleep(100);
}
if(CalculateCurrentOrders(Symbol())==-1)
{
if (OrderSelect(resPending2,SELECT_BY_TICKET)==true)
if (OrderTakeProfit()!=OrderOpenPrice()-Point*TwoTriggerOneTP && (Bid-OrderOpenPrice()-Point*TwoTriggerOneTP)>Stoplevel*Point)
OrderModify(resPending2,OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-Point*TwoTriggerOneTP,0,Red);
// while(!IsTradeAllowed()) Sleep(100);
}
}
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
if(buys>0) return(buys);
else return(-sells);
}
void CalculateMM()
{
double MinLots=MarketInfo(Symbol(),MODE_MINLOT);
double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
Lot=AccountFreeMargin()/100000*RiskPercent;
Lot=MathMin(MaxLots,MathMax(MinLots,Lot));
if(MinLots<0.1)Lot=NormalizeDouble(Lot,2);
else
{
if(MinLots<1)Lot=NormalizeDouble(Lot,1);
else Lot=NormalizeDouble(Lot,0);
}
if(Lot<MinLots)Lot=MinLots;
if(Lot>MaxLots)Lot=MaxLots;
return(0);
}
bool isTimeForTrade()
{
if( !RestrictTime ) { return(true); }
return(isTimeInPeriod(TimeCurrent(), HourStart, MinuteStart, HourStop, MinuteStop));
}
bool isTimeInPeriod(datetime time, int pSHour, int pSMinute, int pEHour, int pEMinute)
{
int tmp = TimeHour(time);
if( pSHour < pEHour && (tmp < pSHour || tmp > pEHour) ) { return(false); }
if( pSHour > pEHour && (tmp > pSHour || tmp < pEHour) ) { return(false); }
if( pSHour == pEHour && tmp != pSHour ) { return(false); }
if( tmp == pEHour && TimeMinute(time) > pEMinute ) { return(false); }
if( tmp == pSHour && TimeMinute(time) < pSMinute ) { return(false); }
return(true);
}
//+------------------------------------------------------------------+
//| Ikhram EA by Dzhini.mq4 |
//| Copyright © 2010, Gorbushin Grigory (Dzhini) |
//| [email protected] |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Gorbushin Grigory (Dzhini)"
#property link "[email protected]"
int MAGICMA=23423423;
extern double Lot=0.1;
extern int TP=5;
extern int PendingDistance=10;
extern int TwoTriggerOneTP=1;
extern bool RiskMM=false;
extern double RiskPercent=10;
extern bool RestrictTime = false;
extern int HourStart = 0;
extern int MinuteStart = 0;
extern int HourStop = 24;
extern int MinuteStop = 0;
int resPending1,resPending2;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start()
{
if(Bars<100 && IsTradeAllowed()==false) return;
if(RiskMM)CalculateMM();
if(isTimeForTrade()&&NumberOfPositions(NULL,-1,MAGICMA)== 0&&ExistOrders(NULL,-1,MAGICMA,0)==0) {CheckForOpen();}
if(NumberOfPositions(NULL,-1,MAGICMA)== 0&&NumberOfOrders(NULL,-1,MAGICMA)==1){DeleteOrders(NULL,-1,MAGICMA);}
if(NumberOfPositions(NULL,-1,MAGICMA)== 1&&isCloseLastPosByTake(NULL,-1,MAGICMA)==true){ModifyOrderTP();}
return;
}
bool ExistOrders(string sy, int op, int mn, datetime ot) {
int i, k=OrdersTotal(), ty;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ty=OrderType();
if (ty>1 && ty<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
return(False);
}
int NumberOfPositions(string sy, int op, int mn) {
int i, k=OrdersTotal(), kp=0;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) kp++;
}
}
}
}
}
return(kp);
}
void CheckForOpen()
{
resPending1=OrderSend(Symbol(),OP_BUYSTOP ,Lot ,Ask+PendingDistance*Point,2,0,Ask+PendingDistance*Point+TP*Point,"",MAGICMA,0,Blue);
// while(!IsTradeAllowed()) Sleep(100);
resPending2=OrderSend(Symbol(),OP_SELLSTOP,Lot ,Bid-PendingDistance*Point,2,0,Bid-PendingDistance*Point-TP*Point,"",MAGICMA,0,Red);
// while(!IsTradeAllowed()) Sleep(100);
}
int NumberOfOrders(string sy, int op, int mn) {
int i, k=OrdersTotal(), ko=0, ot;
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) ko++;
}
}
}
}
return(ko);
}
void DeleteOrders(string sy, int op, int mn)
{
int i, k=OrdersTotal(), ot;
if (sy=="" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
if (OrderSymbol()==sy && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
OrderDelete(OrderTicket(), Yellow);
}
}
}
}
}
}
bool isCloseLastPosByTake(string sy, int op, int mn) {
datetime t;
double ocp, otp;
int dg, i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(sy, MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
void ModifyOrderTP()
{
double Price;
double Stoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(CalculateCurrentOrders(Symbol())==1)
{
if (OrderSelect(resPending1,SELECT_BY_TICKET)==true)
if (OrderTakeProfit()!=OrderOpenPrice()+Point*TwoTriggerOneTP && (OrderOpenPrice()+Point*TwoTriggerOneTP-Ask)>Stoplevel*Point)
OrderModify(resPending1,OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()+Point*TwoTriggerOneTP,0,Blue);
// while(!IsTradeAllowed()) Sleep(100);
}
if(CalculateCurrentOrders(Symbol())==-1)
{
if (OrderSelect(resPending2,SELECT_BY_TICKET)==true)
if (OrderTakeProfit()!=OrderOpenPrice()-Point*TwoTriggerOneTP && (Bid-OrderOpenPrice()-Point*TwoTriggerOneTP)>Stoplevel*Point)
OrderModify(resPending2,OrderOpenPrice(),OrderStopLoss(),OrderOpenPrice()-Point*TwoTriggerOneTP,0,Red);
// while(!IsTradeAllowed()) Sleep(100);
}
}
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
if(buys>0) return(buys);
else return(-sells);
}
void CalculateMM()
{
double MinLots=MarketInfo(Symbol(),MODE_MINLOT);
double MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
Lot=AccountFreeMargin()/100000*RiskPercent;
Lot=MathMin(MaxLots,MathMax(MinLots,Lot));
if(MinLots<0.1)Lot=NormalizeDouble(Lot,2);
else
{
if(MinLots<1)Lot=NormalizeDouble(Lot,1);
else Lot=NormalizeDouble(Lot,0);
}
if(Lot<MinLots)Lot=MinLots;
if(Lot>MaxLots)Lot=MaxLots;
return(0);
}
bool isTimeForTrade()
{
if( !RestrictTime ) { return(true); }
return(isTimeInPeriod(TimeCurrent(), HourStart, MinuteStart, HourStop, MinuteStop));
}
bool isTimeInPeriod(datetime time, int pSHour, int pSMinute, int pEHour, int pEMinute)
{
int tmp = TimeHour(time);
if( pSHour < pEHour && (tmp < pSHour || tmp > pEHour) ) { return(false); }
if( pSHour > pEHour && (tmp > pSHour || tmp < pEHour) ) { return(false); }
if( pSHour == pEHour && tmp != pSHour ) { return(false); }
if( tmp == pEHour && TimeMinute(time) > pEMinute ) { return(false); }
if( tmp == pSHour && TimeMinute(time) < pSMinute ) { return(false); }
return(true);
}
