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

KI TESTER

ki ea.mq4
Вы автор или правообладатель?

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

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

О программе

KI TESTER — торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Советник генерирует торговые сигналы на основе внешнего индикатора KI_signals_v2 и автоматически управляет открытием и закрытием позиций на рынке.

При формировании сделок советник проверяет значение индикатора ADX и открывает позиции только при достижении заданного порогового уровня. Доступен режим инверсии направления сигналов. Для управления рисками предусмотрены фиксированные стоп-лосс и тейк-профит, а также опциональный трейлинг-стоп с модификацией защитного уровня.

Встроен фильтр по времени, ограничивающий торговлю заданным часовым интервалом. Все позиции идентифицируются по уникальному magic number, что позволяет советнику изолировать свои ордера от сделок других программ на счёте.

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

НастройкаОписание
Confirm Подтверждение — Параметр подтверждения, используемый при проверке торговых сигналов индикатора
length1 Длина 1 — Первый параметр длины для индикатора KI_signals_v2
lots Объём сделки — Объём торговой позиции в лотах
TakeProfit Тейк-профит — Величина тейк-профита в пунктах (0 — без тейк-профита)
StopLoss Стоп-лосс — Величина стоп-лосса в пунктах (0 — без стоп-лосса)
UseTrail Использовать трейлинг-стоп — Включает или отключает трейлинг-стоп для открытых позиций
TrailingAct Активация трейлинга — Расстояние в пунктах для активации трейлинг-стопа
TrailingStep Шаг трейлинга — Шаг трейлинг-стопа в пунктах
UseADX Использовать ADX — Включает или отключает фильтрацию сигналов по индикатору ADX
ADXthresh Порог ADX — Пороговое значение индикатора ADX, при превышении которого разрешается открытие позиций
UseTimeFilter Временной фильтр — Включает или отключает ограничение торгового времени по часам
BeginHour Час начала — Час начала торговой сессии для встроенного временного фильтра
EndHour Час окончания — Час окончания торговой сессии для встроенного временного фильтра
Reverse Инверсия сигналов — Переключатель инверсии направления торговых сигналов
Получить полный код

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

#include <stdlib.mqh>
#include <WinUser32.mqh>
   extern int Confirm=1;
   extern int length1=3,length2=10,length3=16;

   extern double lots=0.1;            
   extern int TakeProfit=0;             
   extern int StopLoss=0;            
   extern bool UseTrail    = true; 

   extern double  TrailingAct   = 10;    
   extern double  TrailingStep   = 40;  

   extern bool UseADX=false;
   extern double ADXthresh=30;
   extern bool UseTimeFilter=false;
   extern int BeginHour=8;
   extern int EndHour=18;
   extern bool Reverse=false;

   int bar;
   int TestStart;
   int k;
   int mm,dd,yy,hh,min,ss,tf;
   string comment;
   string syym;
   string qwerty;
   int OrderID=234;
   double TrailPrice;

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

int deinit()
  {

   return(0);
  }

int TimeFilter(){
   if(Hour()>EndHour || Hour()<BeginHour){
      return(1);
   }
   return(0);
}

int CalculateCurrentOrders(){
   int orders=0;

   for(int i=0;i<OrdersTotal();i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==OrderID ){
            orders++;
         }
      }
   }

   return(orders);
}

double signal(int p,int x){
   int l1=length1,l2=length2,l3=length3;
   double
   sig=NormalizeDouble(iCustom(NULL,0,"KI_signals_v2",l1,l2,l3,p,x),4);

   if(sig>0 && sig<100)return(sig);

   return(0);
}

double lastsig(){
static double lst;
   for(int i=100;i>=0;i--){
      if(signal(2,i)>0)lst = signal(2,i);
      if(signal(3,i)>0)lst = signal(3,i);
   }
return(lst);
}

int TradeSignal(int f){

   double adxsig= iADX(NULL,0,14,0,MODE_MAIN,0);

   int x = Confirm;

      if(UseADX){
         if(adxsig>ADXthresh){   
            bool ADX=true;
         }else{
            ADX=false;
         }
      }else{
         ADX=true;
      }

      if(signal(2,x)>0 && ADX){
         if(Reverse){
            return(2);
         }else{
            return(1);
         }
      }
      if(signal(3,x)>0 && ADX){
         if(Reverse){
            return(1);
         }else{
            return(2);
         }
      }

   return(0);
}

void CheckForOpen(){
double sl,tp; int res,error;

  if(TradeSignal(1)==2){
      if (StopLoss==0) {sl=0;} else sl=Bid+Point*StopLoss;
      if (TakeProfit==0) {tp=0;} else tp=Bid-Point*TakeProfit;

      res = OrderSend(Symbol(),OP_SELL,lots,Bid,3,sl,tp,"D2",OrderID,0,Blue); // def
      if(res<0){
         error=GetLastError();
         Print("Error = ",ErrorDescription(error));
      }
  }
  if(TradeSignal(1)==1){
      if (StopLoss==0) {sl=0;} else sl=Ask-Point*StopLoss;
      if (TakeProfit==0) {tp=0;} else tp=Ask+Point*TakeProfit;

      res = OrderSend(Symbol(),OP_BUY,lots,Ask,3,sl,tp,"D2",OrderID,0,Red); // def
      if(res<0){
         error=GetLastError();
         Print("Error = ",ErrorDescription(error));
      }
  }
}   

void CheckForClose(){

   for(int i=0;i<OrdersTotal();i++){
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);    
      if (OrderType()==OP_BUY && OrderMagicNumber()==OrderID && Symbol()==OrderSymbol()){
         if (TradeSignal(2)==2) {                          // MA SELL signals
            int res = OrderClose(OrderTicket(),OrderLots(),Bid,3,White); // close 
            TrailPrice=0;
            if(res<0){
               int error=GetLastError();
               Print("Error = ",ErrorDescription(error));
            }
         }     
      } 
      if (OrderType()==OP_SELL && OrderMagicNumber()==Ord

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

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

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

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

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

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

Стоимость полного кода
458,80₽ ≈ $5.61