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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.