Советник на основе п.и trend.

 

Добрый день. Я начинающий программист. Захотел написать советник на основе пользовательского индикатора trend. Но проблема в том, что я совершенно не знаю как его туда интегрировать, то есть какую часть кода надо вставить,в советник чтобы он торговал.


Вот код:


//+------------------------------------------------------------------+

//| igor4.mq4 |

//| Copyright © 2009, MetaQuotes Software Corp. |

//| https://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2009, MetaQuotes Software Corp."

#property link "https://www.metaquotes.net"


//---------------------------------------------------------------------------


extern double StopLoss =200;


extern double TakeProfit =100;


extern double Lots =0.1;


extern int period = 10;


extern int price = 1;


bool Mode_fact = false;


bool signals = false;


bool Work = true;


extern double Prots =0.07;


string Symb;


//-------------------------------------//


int start()

{

//----

int


Total,

Tip=-1,

Ticket;

double

valume,

Lot,

Lts,

Min_Lot,

Step,

Free,

One_Lot,

Price,

SL,

TP;

bool

Ans =false,

Cls_B = false,

Cls_S = false,

Opn_B = false,

Opn_S= false;


//-----------------------------------------------------------------------------------------//


Symb=Symbol();


Total=0;


for(int i=1; i<=OrdersTotal(); i++)

{ if (OrderSelect(i-1,SELECT_BY_POS)==true)

{ if (OrderSymbol()!=Symb)continue;

if (OrderType()>1)

{ Alert("Обнаружен отложенный ордер. Эксперт не работает.");

return;

}

Total ++;

if (Total > 1)

{

Alert("Несколько рыночных ордеров. Эксперт не работает.");

return;

}

Ticket=OrderTicket();

Tip =OrderType();

Price =OrderOpenPrice();

SL =OrderStopLoss();

Lot =OrderLots();

}

}

//--------------------------------------------------------------------//


valume =CurrentPrice-iBands(NULL,0,Bands_Period,Bands_Deviation,0,Bands_Mode,Power_Price,i);


if (valume > 0);

{

Opn_B=true;

Opn_S=true;

}

if (valume <= 0);

{

Cls_B=true;

Cls_S=true;


}

//------------------------------------------------------------------------------------------//


while(true)

{ if (Tip==0 && Cls_B==true)


{

Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");

RefreshRates();

Ans=OrderClose(Ticket,Lot,Bid,2);

if (Ans==true)

{ Alert ("Закрыт ордер Buy ",Ticket); break;

} if (Fun_Error(GetLastError())==1)

continue;

return; }

if (Tip==1 && Cls_S==true)

{

Alert("Попытка закрыть Sell ",Ticket,". Ожидание ответа..");

RefreshRates();

Ans=OrderClose(Ticket,Lot,Ask,2);

if (Ans==true)

{ Alert ("Закрыт ордер Sell ",Ticket);

break;

} if (Fun_Error(GetLastError())==1)

continue;

return;

}

break;

}

//-------------------------------------------------------------------------//

RefreshRates();

Min_Lot=MarketInfo(Symb,MODE_MINLOT);

Free =AccountFreeMargin();

One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);

Step =MarketInfo(Symb,MODE_LOTSTEP);

if (Lots > 0)

Lts =Lots;

else

Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;

if(Lts < Min_Lot) Lts=Min_Lot;

if (Lts*One_Lot > Free)

{ Alert(" Не хватает денег на ", Lts," лотов");

return;

}

//-------------------------------------------------------------------------------

while(true)

{ if (Total==0 && Opn_B==true)

{

RefreshRates();

SL=Bid - New_Stop(StopLoss)*Point;

TP=Bid + New_Stop(TakeProfit)*Point;

Alert("Попытка открыть Buy. Ожидание ответа..");

Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);

if (Ticket > 0)

{ Alert ("Открыт ордер Buy ",Ticket);

return;

} if (Fun_Error(GetLastError())==1)

continue;

return;

} if (Total==0 && Opn_S==true)

{

RefreshRates();

SL=Ask + New_Stop(StopLoss)*Point;

TP=Ask - New_Stop(TakeProfit)*Point;

Alert("Попытка открыть Sell. Ожидание ответа..");

Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);

if (Ticket > 0)

{ Alert ("Открыт ордер Sell ",Ticket);

return;

}

if (Fun_Error(GetLastError())==1)

continue;

return;

} break;

}

//----

return;

}

int Fun_Error(int Error){

switch(Error)

{

case 4: Alert("Торговый сервер занят. Пробуем ещё раз..");

Sleep(3000); return(1);

case 135:Alert("Цена изменилась. Пробуем ещё раз..");

RefreshRates(); return(1);

case 136:Alert("Нет цен. Ждём новый тик..");

while(RefreshRates()==false)Sleep(1);return(1); case 137:Alert("Брокер занят. Пробуем ещё раз..");

Sleep(3000);

return(1);case 146:Alert("Подсистема торговли занята. Пробуем ещё..");

Sleep(500);

return(1); case 2: Alert("Общая ошибка.");

return(0);case 5: Alert("Старая версия терминала.");

Work=false;

return(0); case 64: Alert("Счет заблокирован.");

Work=false;

return(0);case 133:Alert("Торговля запрещена.");

return(0);case 134:Alert("Недостаточно денег для совершения операции.");

return(0);default: Alert("Возникла ошибка ",Error); return(0); }

}

//-------------------------------------------------------------- 11 --

int New_Stop(int Parametr) // Проверка стоп-прик.

{

int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);

if (Parametr < Min_Dist){

Parametr=Min_Dist; Alert("Увеличена дистанция стоп-приказа.");

}

return(Parametr);

}

Внизу я прикрепил сам индикатор. Помогите кому не сложно.

Файлы:
trend.rar  6 kb
 
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Расчет указанного пользовательского индикатора. Пользовательский индикатор должен быть скомпилирован (файл с расширением EX4) и находиться в директории каталог_терминала\experts\indicators.
 

vvavva, у меня индикатор скомпилирован и находится в той папке.


Задача советника, чтобы он только один ордер делал на покупку, потом продавал. То есть играл на повышение.


Как мне произвести в жизнь этот алгоритм?

алгоритм, если volume > 0, то покупать, меньше или ровно продавать.


в какую часть кода это запихать?

"double iCustom(

string symbol, int timeframe, string name, ..., int mode, int shift)"




 

У меня вся ошибка в Торговых критериях:


valume =CurrentPrice-iBands(NULL,0,Bands_Period,Bands_Deviation,0,Bands_Mode,Power_Price,i);


if (valume > 0);

{

Opn_B=true;

Opn_S=true;

}

if (valume <= 0);

{

Cls_B=true;

Cls_S=true;


}


Мне нужно их изменить, то есть задать правильно.

Вот картинка:



 
igort >>:

У меня вся ошибка в Торговых критериях:


valume =CurrentPrice-iBands(NULL,0,Bands_Period,Bands_Deviation,0,Bands_Mode,Power_Price,i);


if (valume > 0);

{

Opn_B=true;

Opn_S=true;

}

if (valume <= 0);

{

Cls_B=true;

Cls_S=true;


}


Мне нужно их изменить, то есть задать правильно.

Вот картинка:



igort не подскажите где вы взяли этот индикатор

 
уже не помню, месяца 2 назад скачал.
 
igort >>:
уже не помню, месяца 2 назад скачал.

а исходник к нему есть?

 
да, могу дать если поможете.
Причина обращения: