ne anlam ifade eder bilmiyorum ama;
sisteme giriş şartlarını değiştirerek sistem ters çalışır,
yani buy == sell, selll == buy olur,
if(open[1]
>ma && close[1]
<ma) ===> if(open[1]
<ma && close[1]
>ma)
bir önceki barın açılış fiyatı büyüktür ma ve bir öncek barın kapanış fiyatı küçüktür ma şartını ters yapmalıyız,
yeni hali aşağıdadır,
//+------------------------------------------------------------------+
//| moving average.mq4 |
//| copyright 2005-2014, metaquotes software corp. |
//|
http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "2005-2014, metaquotes software corp."
#property link "http://www.mql4.com"
#property description "moving average sample expert advisor"
#define magıcma 20131111
//--- ınputs
input double lots =0.1;
input double maximumrisk =0.02;
input double decreasefactor=3;
input int movingperiod =12;
input int movingshift =6;
//+------------------------------------------------------------------+
//| calculate open positions |
//+------------------------------------------------------------------+
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()==magıcma)
{
if(ordertype()==op_buy) buys++;
if(ordertype()==op_sell) sells++;
}
}
//--- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| calculate optimal lot size |
//+------------------------------------------------------------------+
double lotsoptimized()
{
double lot=lots;
int orders=historytotal(); // history orders total
int losses=0; // number of losses orders without a break
//--- select lot size
lot=normalizedouble(accountfreemargin()*maximumris k/1000.0,1);
//--- calcuulate number of losses orders without a break
if(decreasefactor>0)
{
for(int i=orders-1;i>=0;i--)
{
if(orderselect(i,select_by_pos,mode_hıstory)==fals e)
{
print("error in history!");
break;
}
if(ordersymbol()!=symbol() || ordertype()>op_sell)
continue;
//---
if(orderprofit()>0) break;
if(orderprofit()<0) losses++;
}
if(losses>1)
lot=normalizedouble(lot-lot*losses/decreasefactor,1);
}
//--- return lot size
if(lot<0.1) lot=0.1;
return(lot);
}
//+------------------------------------------------------------------+
//| check for open order conditions |
//+------------------------------------------------------------------+
void checkforopen()
{
double ma;
int res;
//--- go trading only for first tiks of new bar
if(volume[0]>1) return;
//--- get moving average
ma=ima(null,0,movingperiod,movingshift,mode_sma,pr ıce_close,0);
//--- sell conditions
if(open[1]>ma && close[1]<ma)
{
res=ordersend(symbol(),op_sell,lotsoptimized(),bid ,3,0,0,"",magıcma,0,red);
return;
}
//--- buy conditions
if(open[1]<ma && close[1]>ma)
{
res=ordersend(symbol(),op_buy,lotsoptimized(),ask, 3,0,0,"",magıcma,0,blue);
return;
}
//---
}
//+------------------------------------------------------------------+
//| check for close order conditions |
//+------------------------------------------------------------------+
void checkforclose()
{
double ma;
//--- go trading only for first tiks of new bar
if(volume[0]>1) return;
//--- get moving average
ma=ima(null,0,movingperiod,movingshift,mode_sma,pr ıce_close,0);
//---
for(int i=0;i<orderstotal();i++)
{
if(orderselect(i,select_by_pos,mode_trades)==false ) break;
if(ordermagicnumber()!=magıcma || ordersymbol()!=symbol()) continue;
//--- check order type
if(ordertype()==op_buy)
{
if(open[1]<ma && close[1]>ma)
{
if(!orderclose(orderticket(),orderlots(),bid,3,whi te))
print("orderclose error ",getlasterror());
}
break;
}
if(ordertype()==op_sell)
{
if(open[1]>ma && close[1]<ma)
{
if(!orderclose(orderticket(),orderlots(),ask,3,whi te))
print("orderclose error ",getlasterror());
}
break;
}
}
//---
}
//+------------------------------------------------------------------+
//| ontick function |
//+------------------------------------------------------------------+
void ontick()
{
//--- check for history and trading
if(bars<100 || ıstradeallowed()==false)
return;
//--- calculate open orders by current symbol
if(calculatecurrentorders(symbol())==0) checkforopen();
else checkforclose();
//---
}
//+------------------------------------------------------------------+