← К каталогу
Исходный код · ID 4108

hft ea2.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный советник предназначен для автоматической торговли на платформе MetaTrader 4. Он анализирует цену на нескольких таймфреймах, оценивая отклонение текущей цены от среднего значения, и использует объёмные индикаторы для подтверждения торговых сигналов.

При обнаружении значительного отклонения цены вверх или вниз с учётом объёмных условий советник открывает сделки. Перед входом проверяется допустимый уровень спреда и комиссии. Открытые позиции закрываются при возврате цены к среднему значению.

Размер позиции рассчитывается исходя из процента риска от баланса счёта с учётом минимального лота, спреда и комиссии. Тейк-прибытие устанавливается на объёмном среднем значении цены.

Настройки программы

НастройкаОписание
risk_percent Процент риска от баланса счёта, используемый для расчёта размера лота.
commision Комиссия в пунктах, учитываемая при расчёте допустимого спреда и размера позиции.
spreadRR Допустимое соотношение спреда к отклонению цены, при котором допускается вход в сделку.
mtf Количество таймфреймов, используемых для анализа цены и формирования сигналов.
Получить полный код

Поиск по коду файла

#property description "High-Frequency Trading Robot"

extern double risk_percent = 1;
extern double commision = 7;
extern double spreadRR  = 0.20;
extern int mtf = 1;

int Ticket;
int i,j;
int timef;

double VOLUME[500];
double CLOSE[500];
double HIGH[500];
double LOW[500];
double OBV[500];
double AD[500];

double sum,sumv, sumh, suml, sumOBV, sumAD;
double mean,meanh,meanl,meanv,meanOBV,meanAD;
double e, eOBV, eAD;
double vol;

int trade=0;
double Lots,distSL,pointsdistSL,spread,spreadpoints,CommisionPoints,lotvaluepoint,minlot,minimumrisk,digits,TP;

int OnInit()
{
      // код доступен только после оплаты
   }

int deinit()
{
return(0);}  

void OnTick()
  {
      // код доступен только после оплаты
   }

if(OrdersTotal()==0)
{

for(timef=1; timef<=mtf; timef++)
{

if(timef*30<Bars)
{

sum=0;
for(i=0; i<20; i++)
{CLOSE[i]=Close[i*timef];
sum=sum+CLOSE[i];}
mean=sum/20;

e=0;
for(i=0; i<20; i++)
{e=e+MathPow(CLOSE[i]-mean,2);}
e=MathSqrt(e/20);

if(CLOSE[0]>mean+2*e)
{

suml=0; sumv=0; vol=0;
for(i=0;i<20;i++)
{
LOW[i]=Low[iLowest(NULL,0,MODE_LOW,timef,i*timef)];
suml=suml+LOW[i];

j=0; VOLUME[i]=0;
while( j<timef )
{VOLUME[i]=VOLUME[i]+Volume[i*timef+j]; j++;}
sumv=sumv+CLOSE[i]*VOLUME[i];
vol=vol+VOLUME[i];
}
meanl=suml/20;
meanv=sumv/vol;

if(meanv<meanl)
{

OBV[20]=0; CLOSE[20]=Close[20*timef]; sumOBV=0;
for(i=19;i>=0; i--)
{
if( CLOSE[i]>CLOSE[i+1] )
{OBV[i]=OBV[i+1]+VOLUME[i];}
else{OBV[i]=OBV[i+1]-VOLUME[i];}
sumOBV=sumOBV+OBV[i];
}
meanOBV=sumOBV/20;

eOBV=0;
for(i=0; i<20; i++)
{eOBV=eOBV+MathPow(OBV[i]-meanOBV,2);}

eOBV=MathSqrt(eOBV/20);

if( OBV[0]<meanOBV )
{

AD[20]=0; sumAD=0;
for(i=19;i>=0; i--)
{
AD[i]=AD[i+1]+VOLUME[i]*(CLOSE[i]-CLOSE[i+1]);
sumAD=sumAD+AD[i];
}

meanAD=sumAD/20;

eAD=0;
for(i=0; i<20; i++)
{eAD=eAD+MathPow(AD[i]-meanAD,2);}

eAD=MathSqrt(eAD/20);

if( AD[0]<meanAD )
{

Alert(Symbol()," Sell Signal ",timef,"  Spread: ",NormalizeDouble( ((Ask-Bid)+commision*Point)/(Close[0]-meanh),2 ) );
if( (Ask-Bid)+commision*Point<=spreadRR*(Close[0]-meanh) )
{
distSL=Close[0]-meanh;//Alert("distSL ",distSL);
pointsdistSL=distSL/Point;//Alert("pointsdistSL ",pointsdistSL);
spread=Ask-Bid; //Alert("spread ",spread);
spreadpoints=spread/Point;//Alert("spreadpoints ",spreadpoints);
CommisionPoints=commision;//Alert("CommisionPoints ",CommisionPoints);
lotvaluepoint=MarketInfo(NULL,MODE_TICKVALUE);//Alert("lotvaluepoint ",lotvaluepoint);
minlot=MarketInfo(NULL,MODE_MINLOT);//Alert("minlot ",minlot);
minimumrisk=(pointsdistSL+spreadpoints+CommisionPoints)*lotvaluepoint*minlot;//Alert("minimumrisk ",minimumrisk);
if(MarketInfo(NULL,MODE_MINLOT)==0.01){digits=2;}else if(MarketInfo(NULL,MODE_MINLOT)==0.1){digits=1;}else if(MarketInfo(NULL,MODE_MINLOT)==1){digits=0;}//Alert("digits ",digits);
Lots= (((risk_percent/100)*AccountBalance())/minimumrisk)*minlot;//Alert("Lots ",Lots);
if(Lots>=minlot)
{
Lots=NormalizeDouble(Lots,digits);Alert("lots>minlot   margin required=",Lots*MarketInfo(NU

Показано первые 50% кода (символов: 5692)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
569,20₽ ≈ $6.96