PDA

Просмотр полной версии : советник МА



u.max
10.04.2012, 21:14
к советнику, которого написал Amadey_MF (тема "общие способы торговли" (http://forum.clusterdelta.com/showthread.php?668-6.-%CE%E1%F9%E8%E5-%F1%EF%EE%F1%EE%E1%FB-%F2%EE%F0%E3%EE%E2%EB%E8&p=6407&viewfull=1#post6407)), нужно добавить установку стопа, трал, тейк, возможность переводить в б/у

убрать выход по обратному сигналу

код тут: http://amadey-mf.livejournal.com/84565.html


// эксперт для теста стратегии МА в МТ4

extern int FastPer = 7; // здесь устанавливаем период быстрой МА
extern int SlowPer = 21; // здесь устанавливаем период медленной МА


int ticket=0;

int start()
{


int Ord=0;


for(int i = 0; i <= OrdersTotal(); i++) // определение есть ли открытые ордера?
{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() == 777)
{
ticket=OrderTicket();
if (OrderType()==OP_BUY)
{
Ord=1;// если есть открытая баевая позиция то Ord = 1
}
else
{
Ord=2;// если есть открытая шортовая позиция то Ord = 2
}

}

}



bool SellOp=false;
bool BuyOp=false;


double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_ SMA,PRICE_CLOSE,2),Digits); // быстрая прошлого бара
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_ SMA,PRICE_CLOSE,0),Digits); // быстрая текущего бара

double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_ SMA,PRICE_CLOSE,2),Digits); // медленная прошлого бара
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_ SMA,PRICE_CLOSE,0),Digits); // медленная текущего бара



if ( // проверка условий на покупку
(MAFast2<=MASlow2)&&
(MAFast3>MASlow3))
{
BuyOp=true;
}

if ( // проверка условий на продажу
(MAFast2>=MASlow2)&&
(MAFast3<MASlow3))
{
SellOp=true;
}


if (BuyOp) // если условия на покупку выполняются
{
if (Ord==2)// и если уже открыта шортовая позиция
{
OrderClose(ticket,1,Ask,3,Red); // тогда закрыть шортовую
}
if (Ord!=1)// а если ещё не открыта баевая позиция
{
OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0," buy ",777,0,Green); // тогда открыть баевую
}
}

if (SellOp) // если условия на продажу выполняются
{
if (Ord==1) // и если уже открыта баевая позиция
{
OrderClose(ticket,1,Bid,3,Green);
}
if (Ord!=2) // а если ещё не открыта шортовой позиции
{
OrderSend(Symbol(),OP_SELL,1,Bid,3,0,0," sell",777,0,Red); // тогда открыть шортовую
}
}


return(0);
}