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

hft ea.mq4

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

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

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

О программе

Данный продукт представляет собой торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Советник выполняет анализ на нескольких таймфреймах одновременно, проверяя от одного до шести периодов с шагом 300 секунд.

В основе работы лежит статистический анализ ценовых данных: вычисляется среднее значение и стандартное отклонение закрытий за 200 баров на каждом таймфрейме. Когда цена отклоняется от среднего на величину более двух стандартных отклонений, советник рассчитывает объёмно-взвешенную среднюю цену, а также анализирует индикаторы OBV (суммарный объём) и AD (накопление/распределение), проверяя их экстремальные отклонения от средних.

При совпадении условий по всем трём индикаторам советник открывает позицию BUY или SELL с фиксацией прибыли на уровне объёмно-взвешенной средней цены. Перед входом проверяется допустимость спреда и комиссии. Позиции закрываются при возврате цены к среднему значению соответствующего таймфрейма. Размер лота рассчитывается исходя из процента риска от баланса счёта.

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

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

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

#property description "High-Frequency Trading Robot"

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

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<=6; timef++)
{

if(timef*300<Bars)
{

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

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

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

suml=0; sumv=0; vol=0;
for(i=0;i<200;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/200;
meanv=sumv/vol;

if(meanv<meanl)
{

OBV[200]=0; CLOSE[200]=Close[200*timef]; sumOBV=0;
for(i=199;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/200;

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

eOBV=MathSqrt(eOBV/200);

if( OBV[0]<meanOBV-2*eOBV )
{

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

meanAD=sumAD/200;

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

eAD=MathSqrt(eAD/200);

if( AD[0]<meanAD-2*eAD )
{

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(NULL,MODE_MAR

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

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

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

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

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

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

Стоимость полного кода
573,70₽ ≈ $7.01