Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 21.03.13
NonExperts NonExperts ist offline
Neues Mitglied
 
Registriert seit: Jan 2012
Beiträge: 8
NonExperts befindet sich auf einem aufstrebenden Ast
Standard EA GoogG@bi für ECN anpassen

Moin Leute,

ich habe einen sehr interessanten EA im Netz gefunden. Er soll auf H1 Basis 100% Gewinntrades geliefert haben. Und das konnten auch andere Leute mit ihren Backtestes bestädigen. Nur ist dieser EA nicht für ECN Konten angepasst. Er brachte am Anfang die Fehlermeldungen Error 130 invalid Stops. Das konnte ich schon abstellen. Aber die Befehlszeile OrderModify haut bei mir nicht hin.

Ich post mal hier den Quellcode. Er ist nicht all zu lang. Kann mir das bitte jemand hinbiegen? Danke schon mal im Voraus.
//+------------------------------------------------------------------+
//| GoodG@bi.mq4 |
//| Copyright © 2009-2011, moniBrok Exchange |
//| http://www.monibrok.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009-2011, moniBrok Exchange"
#property link "http://www.monibrok.com"

int TakeProfit_L = 39; // Take Profit in points
int StopLoss_L = 147; // Stop Loss in points
extern int TakeProfit_S = 15; // Take Profit in points
int StopLoss_S = 6000; // Stop Loss in points
extern int TradeTime=18; // Time to enter the market
int t1=6;
int t2=2;
int delta_L=6;
int delta_S=21;
double lot = 0.01; // Lot size
int Orders=1; // maximal number of positions opened at a time }
int MaxOpenTime=504;
int BigLotSize = 5; // By how much lot size is multiplicated in Big lot
bool AutoLot=true;
extern bool ECN=true;

int ticket,total,cnt;
bool cantrade=true;
double closeprice;
double tmp;

int LotSize()
// The function opens a short position with lot size=volume
{

// Size lot according to account balance
//lot=MathMax(.01*NormalizeDouble(AccountBalance()/25,0),.01);


if (AccountBalance()>=50) lot=0.02;
if (AccountBalance()>=75) lot=0.03;
if (AccountBalance()>=100) lot=0.04;
if (AccountBalance()>=125) lot=0.05;
if (AccountBalance()>=150) lot=0.06;
if (AccountBalance()>=175) lot=0.07;
if (AccountBalance()>=200) lot=0.08;
if (AccountBalance()>=225) lot=0.09;
if (AccountBalance()>=250) lot=0.1;
if (AccountBalance()>=275) lot=0.11;
if (AccountBalance()>=300) lot=0.12;
if (AccountBalance()>=325) lot=0.13;
if (AccountBalance()>=350) lot=0.14;
if (AccountBalance()>=375) lot=0.15;
if (AccountBalance()>=400) lot=0.16;
if (AccountBalance()>=425) lot=0.17;
if (AccountBalance()>=450) lot=0.18;
if (AccountBalance()>=475) lot=0.19;
if (AccountBalance()>=500) lot=0.2;
if (AccountBalance()>=550) lot=0.24;
if (AccountBalance()>=600) lot=0.26;
if (AccountBalance()>=650) lot=0.28;
if (AccountBalance()>=700) lot=0.3;
if (AccountBalance()>=750) lot=0.32;
if (AccountBalance()>=800) lot=0.34;
if (AccountBalance()>=850) lot=0.36;
if (AccountBalance()>=900) lot=0.38;
if (AccountBalance()>=1000) lot=0.4;
if (AccountBalance()>=1500) lot=0.6;
if (AccountBalance()>=2000) lot=0.8;
if (AccountBalance()>=2500) lot=1.0;
if (AccountBalance()>=3000) lot=1.2;
if (AccountBalance()>=3500) lot=1.4;
if (AccountBalance()>=4000) lot=1.6;
if (AccountBalance()>=4500) lot=1.8;
if (AccountBalance()>=5000) lot=2.0;
if (AccountBalance()>=5500) lot=2.2;
if (AccountBalance()>=6000) lot=2.4;
if (AccountBalance()>=7000) lot=2.8;
if (AccountBalance()>=8000) lot=3.2;
if (AccountBalance()>=9000) lot=3.6;
if (AccountBalance()>=10000) lot=4.0;
if (AccountBalance()>=15000) lot=6.0;
if (AccountBalance()>=20000) lot=8.0;
if (AccountBalance()>=30000) lot=12;
if (AccountBalance()>=40000) lot=16;
if (AccountBalance()>=50000) lot=20;
if (AccountBalance()>=60000) lot=24;
if (AccountBalance()>=70000) lot=28;
if (AccountBalance()>=80000) lot=32;
if (AccountBalance()>=90000) lot=36;
if (AccountBalance()>=100000) lot=40;
if (AccountBalance()>=200000) lot=80;


}

int globPos()
// the function calculates big lot size
{
int v1=GlobalVariableGet("globalPosic");
GlobalVariableSet("globalPosic",v1+1);
return(0);
}

int OpenLong(double volume=0.01)
// the function opens a long position with lot size=volume
{
int slippage=10;
string comment="20/200 expert v2 (Long)";
color arrow_color=Green;
int magic=0;

if (GlobalVariableGet("globalBalans")>AccountBalance( )) volume=lot*BigLotSize;
//if (GlobalVariableGet("globalBalans")>AccountBalance( )) if (AutoLot) LotSize();


ticket=OrderSend(Symbol(),OP_BUY,volume,Ask,slippa ge,0,0,comment,magic,0,arrow_color);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(ticket,OrderOpenPrice(),StopLoss_L,Tak eProfit_L,0,CLR_NONE);


GlobalVariableSet("globalBalans",AccountBalance()) ;
globPos();
// if (GlobalVariableGet("globalPosic")>25)
// {
GlobalVariableSet("globalPosic",0);
if (AutoLot) LotSize();
// }

if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))
{
OrderModify(ticket,OrderOpenPrice(),StopLoss_L,Tak eProfit_L,0,CLR_NONE);
return(0);
}
else
{
Print("OpenLong(),OrderSelect() - returned an error : ",GetLastError());
return(-1);
}
}
else
{
Print("Error opening Buy order : ",GetLastError());
return(-1);
}
}

int OpenShort(double volume=0.01)
// The function opens a short position with lot size=volume
{
int slippage=10;
string comment="Gabriel Eze Junior >>>SHORT";
color arrow_color=Red;
int magic=0;

if (GlobalVariableGet("globalBalans")>AccountBalance( )) volume=lot*BigLotSize;
//if (GlobalVariableGet("globalBalans")>AccountBalance( )) if (AutoLot) LotSize();

ticket=OrderSend(Symbol(),OP_SELL,volume,Bid,slipp age,0,0,comment,magic,0,arrow_color);
OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
OrderModify(ticket,OrderOpenPrice(),StopLoss_S,Tak eProfit_S,0,CLR_NONE);


GlobalVariableSet("globalBalans",AccountBalance()) ;
globPos();
// if (GlobalVariableGet("globalPosic")>25)
// {
GlobalVariableSet("globalPosic",0);
if (AutoLot) LotSize();
// }

if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))
{
OrderModify(ticket,OrderOpenPrice(),StopLoss_S,Tak eProfit_S,0,CLR_NONE);
return(0);
}
else
{
Print("OpenShort(),OrderSelect() - returned an error : ",GetLastError());
return(-1);
}
}
else
{
Print("Error opening Sell order : ",GetLastError());
return(-1);
}
}

int init()
{
// control of a variable before using
if (AutoLot) LotSize();
if(!GlobalVariableCheck("globalBalans"))
GlobalVariableSet("globalBalans",AccountBalance()) ;
if(!GlobalVariableCheck("globalPosic"))
GlobalVariableSet("globalPosic",0);
return(0);
}

int deinit()
{
return(0);
}

int start()
{
if((TimeHour(TimeCurrent())>TradeTime)) cantrade=true;
// check if there are open orders ...
total=OrdersTotal();
if(total<Orders)
{
// ... if no open orders, go further
// check if it's time for trade
if((TimeHour(TimeCurrent())==TradeTime)&&(cantrade ))
{
// ... if it is
if (((Open[t1]-Open[t2])>delta_S*Point)) //if it is
{
//condition is fulfilled, enter a short position:
// check if there is free money for opening a short position
if(AccountFreeMarginCheck(Symbol(),OP_SELL,lot)<=0 || GetLastError()==134)
{
Print("Not enough money");
return(0);
}
OpenShort(lot);

cantrade=false; //prohibit repeated trade until the next bar
return(0);
}
if (((Open[t2]-Open[t1])>delta_L*Point)) //if the price increased by delta
{
// condition is fulfilled, enter a long position
// check if there is free money
if(AccountFreeMarginCheck(Symbol(),OP_BUY,lot)<=0 || GetLastError()==134)
{
Print("Not enough money");
return(0);
}
OpenLong(lot);

cantrade=false;
return(0);
}
}
}



// block of a trade validity time checking, if MaxOpenTime=0, do not check.
if(MaxOpenTime>0)
{
for(cnt=0;cnt<total;cnt++)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
tmp = (TimeCurrent()-OrderOpenTime())/3600.0;
if (((NormalizeDouble(tmp,8)-MaxOpenTime)>=0))
{
RefreshRates();
if (OrderType()==OP_BUY)
closeprice=Bid;
else
closeprice=Ask;
if (OrderClose(OrderTicket(),OrderLots(),closeprice,1 0,Green))
{
Print("Forced closing of the trade - ¹",OrderTicket());
OrderPrint();
}
else
Print("OrderClose() in block of a trade validity time checking returned an error - ",GetLastError());
}
}
else
Print("OrderSelect() in block of a trade validity time checking returned an error - ",GetLastError());
}
}
return(0);
}