EA - Smart Neural v1
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ea smart neural v1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Советник предназначен для автоматической торговли на финансовых рынках: он анализирует исторические данные цен, определяет сигналы на основе свечных паттернов и технических индикаторов, а затем выполняет сделки buy и sell. Продукт использует импорт функций из DLL для чтения файлов истории и требует разрешения на импорт DLL.
Советник поддерживает ручной и автоматический режимы открытия позиций, усреднение с умножением лота, трейлинг-стоп с фиксацией прибыли, а также фильтр по времени торговли. Отображается информационная панель на графике с текущими данными по позициям, балансу, эквити и прибыли. Предусмотрена кнопка закрытия всех позиций через графический интерфейс.
Перед использованием необходимо убедиться, что в настройках терминала разрешён импорт DLL, и что файл истории в формате .hst доступен для указанного символа и таймфрейма. Советник содержит встроенную проверку даты истечения и закомментированные блоки блокировки по номеру счёта или имени аккаунта.
Настройки программы
| Настройка | Описание |
|---|---|
| OP_BySignal | Режим по сигналу — Вариант настройки — включает или выключает режим работы по сигналу |
| Jarak_OP | Расстояние усреднения — Целое число — расстояние в пунктах для условия открытия усредняющей сделки |
| LotMultiply | Множитель лота — Число — множитель объёма лота при усреднении позиции |
| Close_Signal | Закрытие по сигналу — Переключатель — включает закрытие сделок по сигналу |
| MagicID | Магический номер — Целое число — идентификатор магического номера для ордеров |
| LOTS | Размер лота — Число — фиксированный размер лота при нулевом риске |
| risk: 0-->fixed lots (risk) | Процент риска — Целое число — процент риска от баланса (0 означает фиксированный лот) |
| Max_OP | Максимум позиций — Целое число — максимальное количество открытых позиций |
| SL | Стоп-лосс — Число — размер стоп-лосса в пунктах |
| TP | Тейк-профит — Число — размер тейк-профита в пунктах |
| TPLinier | Линейный TP — Переключатель — линейный расчёт тейк-профита |
| UseTralling (UseTralling) | Трейлинг-стоп — Переключатель — включает трейлинг-стоп |
| Ts Start in Pips (TrallingStart) | Начало трейлинга — Число — расстояние в пунктах для начала трейлинга |
| Lock Profit in Pips (LockProfit) | Фиксация прибыли — Число — фиксация прибыли в пунктах при трейлинге |
| TimeFilter (UseTimeFilter) | Фильтр по времени — Переключатель — включает фильтр по времени торговли |
| Start (Start) | Время начала — Текстовый параметр — время начала фильтра |
| Stop (End1) | Время окончания — Текстовый параметр — время окончания фильтра |
Поиск по коду файла
#include <stderror.mqh>
#include <stdlib.mqh>
#import "kernel32.dll"
int CreateFileW(string Filename,int AccessMode,int ShareMode,int PassAsZero,int CreationMode,int FlagsAndAttributes,int AlsoPassAsZero);
int GetFileSize(int FileHandle,int PassAsZero);
int SetFilePointer(int FileHandle,int Distance,int &PassAsZero[],int FromPosition);
int ReadFile(int FileHandle,uchar &BufferPtr[],int BufferLength,int &BytesRead[],int PassAsZero);
int CloseHandle(int FileHandle);
#import
string Ordercomment="";
int Slippage=3;
int Retries=10;
bool AutoTrade=true;
bool ecnBroker=false;
enum OPBySignal
{
ON=0,
OFF=1,
};
input OPBySignal OP_BySignal = OFF;
input int Jarak_OP = 50;
input double LotMultiply = 1;
input bool Close_Signal = false;
input int MagicID=12345678;
input double LOTS=0.01;
input int risk=100;//risk: 0-->fixed lots
input int Max_OP=5;
input double SL=500;
input double TP=150;
extern bool TPLinier = true;
extern bool UseTralling = false; // UseTralling
extern double TrallingStart = 10; // Ts Start in Pips
extern double LockProfit = 5; // Lock Profit in Pips
extern bool UseTimeFilter = false; // TimeFilter
extern string Start = "00:00";// Start
extern string End1 = "15:00";// Stop
bool jamOP(){
bool Oc=false;
if(UseTimeFilter){
string j1 = TimeToStr(TimeCurrent(), TIME_DATE) + " " + Start;
string j2 = TimeToStr(TimeCurrent(), TIME_DATE) + " " + End1;
if(TimeCurrent()>=StrToTime(j1)&&TimeCurrent()<StrToTime(j2)){return(true);}
}else {return(true);}
return(Oc);
}
union Price
{
uchar buffer[8];
double close;
};
double data[][2];
int BytesToRead;
string datapath;
string result;
Price m_price;
int StopLoss = 0;
double SL_BEP_minus = 0;
double g_Point;
int ticket=0;
double Buy, lotbuy, lotsbuy, Sell, lotsell, lotssell, SUM, SWAP,
profitbuy, profitsell, OP, dg,
sumbuy, sumsell, bepbuy, bepsell, lowlotbuy, lowlotsell, hisell,
lobuy;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectDelete("L01");
ObjectDelete("L02");
ObjectDelete("L03");
ObjectDelete("L04");
ObjectDelete("L05");
ObjectDelete("L06");
ObjectDelete("L07");
ObjectDelete("L08");
ObjectDelete("L09");
ObjectDelete("L10");
ObjectDelete("L11");
ObjectDelete("L12");
ObjectDelete("L13");
ObjectDelete("L14");
ObjectDelete("L15");
ObjectDelete("L16");
ObjectDelete("L17");
ObjectDelete("L18");
ObjectDelete("L19");
ObjectDelete("L20");
ObjectDelete("L21");
ObjectDelete("L22");
ObjectDelete("L23");
ObjectDelete("L24");
ObjectDelete("L25");
ObjectDelete("L26");
ObjectDelete("L27");
ObjectDelete("L28");
ObjectDelete("L29");
ObjectDelete("L30");
ObjectDelete("L31");
ObjectDelete("L32");
ObjectDelete("L33");
ObjectDelete("L34");
ObjectDelete("L35");
ObjectDelete("L36");
ObjectDelete("L37");
ObjectDelete("L38");
ObjectDelete("L39");
ObjectDelete("L40");
ObjectDelete("L41");
ObjectDelete("L42");
ObjectDelete("L43");
ObjectDelete("L44");
ObjectDelete("L45");
ObjectDelete("L46");
ObjectDelete("L47");
ObjectDelete("L48");
ObjectDelete("L49");
ObjectDelete("L50");
ObjectDelete("L51");
ObjectDelete("L52");
ObjectDelete("L53");
ObjectDelete("L54");
ObjectDelete("L55");
ObjectDelete("L56");
ObjectDelete("L57");
ObjectDelete("L58");
ObjectDelete("L59");
ObjectDelete("L60");
ObjectDelete("L61");
ObjectDelete("L62");
ObjectDelete("L63");
ObjectDelete("Average_Price_Line_Bep");
ObjectDelete("Average_Price_Line_Buy");
ObjectDelete("Average_Price_Line_Sell");
ObjectDelete("Information_");
ObjectDelete("Average_Price_Buy");
ObjectDelete("Average_Price_Sell");
ObjectDelete("MENU");
ObjectDelete("MENU1");
ObjectsDeleteAll();
ObjectsDeleteAll();
ObjectsDeleteAll();
ChartRedraw();
}
void OnTick()
{
// код доступен только после оплаты
}
int xx=0;
int CountTrades(){
int count=0;
for(int trade=OrdersTotal()-1;trade>=0;trade--){
int resulttrade=OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicID)continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicID){
if(OrderType()==OP_SELL || OrderType()==OP_BUY){count++;}}}
return(count);}
int CountTradesBuy(){
int count=0;
for(int trade=OrdersTotal()-1;trade>=0;trade--){
int resulttradebuy=OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicID)continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicID){
if(OrderType()==OP_BUY){count++;}}}
return(count);}
int CountTradesSell(){
int count=0;
for(int trade=OrdersTotal()-1;trade>=0;trade--){
int resulttradesell=OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicID)continue;
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicID){
if(OrderType()==OP_SELL ){count++;}}}
return(count);}
void myAvg(){
int iCount = 0;
double LastOP = 0;
double LastLots = 0;
bool LastIsBuy = false;
int iTotalBuy = 0;
int iTotalSell = 0;
double Spread = 0.0;
Spread= MarketInfo(Symbol(), MODE_SPREAD);
int pos = -1 ;
for(int i = 0 ; i < BytesToRead - 1 ; i++)
{
if(!(data[i][0]<Time[0]))
break;
pos = i + 1;
}
for(iCount=0;iCount<OrdersTotal();iCount++){
bool iCount2=false;
iCount2=OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY && OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicID)
{
if(LastOP==0) {LastOP=OrderOpenPrice();}
if(LastOP>OrderOpenPrice()) {LastOP=OrderOpenPrice();}
if(LastLots<OrderLots()) {LastLots=OrderLots();}
LastIsBuy=true;
iTotalBuy++;
}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicID)
{
if(LastOP==0) {LastOP=OrderOpenPrice();}
if(LastOP<OrderOpenPrice()) {LastOP=OrderOpenPrice();}
if(LastLots<OrderLots()) {LastLots=OrderLots();}
LastIsBuy=false;
iTotalSell++;
}
}
/* Jika arah Price adalah DOWNTREND...., Periksa nilai Bid (*/
if(LastIsBuy)
{
if(data[pos][1]>Open[0])
{
if(IsBuyPinbar() && Bid<=LastOP-(Jarak_OP*Point )){
ticket=OrderSend(Symbol(),OP_BUY,NormalizeDouble((LastLots* LotMultiply ),2),Ask,Slippage,0,0,"",MagicID,0,clrGreen);
bool LiB2=false;
LiB2=OrderModify(ticket,OrderOpenPrice(),Ask-SL*g_Point,Ask+(TP*g_Point),0,clrGreen);
LastIsBuy=false;
return;
}
}
}
/* Jika arah Price adalah Sell...., Periksa nilai Ask (*/
else if(!LastIsBuy)
{
if(data[pos][1]<Open[0] )
{
if(IsSellPinbar() && Ask>=LastOP+(Jarak_OP*Point )){
ticket =OrderSend(Symbol(),OP_SELL,NormalizeDouble((LastLots* LotMultiply ),2),Bid,Slippage,0,0,"",MagicID,0,clrRed);
bool LiB=false;
LiB=OrderModify(ticket,OrderOpenPrice(),Bid+SL*g_Point,Bid-(TP*g_Point),0,clrRed);
return;
}
}
}
}
void myAvg1(){
int iCount = 0;
double LastOP = 0;
double LastLots = 0;
bool LastIsBuy = false;
int iTotalBuy = 0;
int iTotalSell = 0;
double Spread = 0.0;
Spread= MarketInfo(Symbol(), MODE_SPREAD);
int pos = -1 ;
for(int i = 0 ; i < BytesToRead - 1 ; i++)
{
if(!(data[i][0]<Time[0]))
break;
pos = i + 1;
}
for(iCount=0;iCount<OrdersTotal();iCount++){
bool iCount1=false;
iCount1=OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY && OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicID)
{
if(LastOP==0) {LastOP=OrderOpenPrice();}
if(LastOP>OrderOpenPrice()) {LastOP=OrderOpenPrice();}
if(LastLots<OrderLots()) {LastLots=OrderLots();}
LastIsBuy=true;
iTotalBuy++;
}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicID)
{
if(LastOP==0) {LastOP=OrderOpenPrice();}
if(LastOP<OrderOpenPrice()) {LastOP=OrderOpenPrice();}
if(LastLots<OrderLots()) {LastLots=OrderLots();}
LastIsBuy=false;
iTotalSell++;
}
}
/* Jika arah Price adalah DOWNTREND...., Periksa nilai Bid (*/
if(LastIsBuy)
{
if(data[pos][1]>Open[0])
{
if(IsBuyPinbar() && Bid<=LastOP-(Jarak_OP*Point )){
ticket=OrderSend(Symbol(),OP_BUY,NormalizeDouble((LastLots* LotMultiply ),2),Ask,Slippage,0,0,"",MagicID,0,clrGreen);
hitung();
tpsl();
LastIsBuy=false;
return;
}
}
}
/* Jika arah Price adalah Sell...., Periksa nilai Ask (*/
else if(!LastIsBuy)
{
if(data[pos][1]<Open[0] )
{
if(IsSellPinbar() && Ask>=LastOP+(Jarak_OP*Point )){
ticket =OrderSend(Symbol(),OP_SELL,NormalizeDouble((LastLots* LotMultiply ),2),Bid,Slippage,0,0,"",MagicID,0,clrRed);
hitung();
tpsl();
return;
}
}
}
}
void hitung()
{
Buy = 0; lotbuy = 0; lotsbuy = 0; Sell = 0; lotsell = 0; lotssell = 0; SUM = 0; SWAP = 0; profitbuy = 0; profitsell = 0;
sumbuy = 0; sumsell = 0; bepbuy = 0; bepsell = 0; lowlotbuy = 9999; lowlotsell = 9999; hisell = 0; lobuy = 999999999;
for (int i = 0; i < OrdersTotal(); i++)
{
bool hitung1=false;
hitung1=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() )
{
continue;
}
if (OrderType() == OP_BUY )
{
Buy++; OP++; lotbuy = OrderLots();
profitbuy += OrderProfit(); lotsbuy += OrderLots(); lowlotbuy = MathMin(lowlotbuy, OrderLots());
sumbuy += OrderLots() * OrderOpenPrice(); lobuy = MathMin(lobuy, OrderOpenPrice());
}
if (OrderType() == OP_SELL )
{
Sell++; OP++; lotsell = OrderLots();
profitsell += OrderProfit(); lotssell += OrderLots(); lowlotsell = MathMin(lowlotsell, OrderLots());
sumsell += OrderLots() * OrderOpenPrice(); hisell = MathMax(hisell, OrderOpenPrice());
}
}
if (lotsbuy > 0)
{
bepbuy = sumbuy / lotsbuy;
}
if (lotssell > 0)
{
bepsell = sumsell / lotssell;
}
} // end hitung
double ND(double p)
{
return(NormalizeDouble(p, Digits));
}
void tpsl( )
{
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
bool TPSL1=false;
TPSL1=OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() )
{
continue;
}
if (OrderType() == OP_BUY )
{
double oTPB = (bepbuy + TP * Point ) * (TP > 0); double oSLB = OrderStopLoss();
if (SL_BEP_minus > 0)
oSLB = (bepbuy - SL_BEP_minus * Point );
if (Buy == 1)
{
oTPB = ND(OrderOpenPrice() + TP * Point ) * (TP > 0); if ( StopLoss > 0)
oSLB = (OrderOpenPrice() - StopLoss * Point );
}
oTPB = ND(oTPB); oSLB = ND(oSLB);
if (Bid >= oTPB && oTPB > 0)
bool BEPSL=false;
BEPSL=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, CLR_NONE);
if (Bid <= oSLB)
bool OPbuyTPSL=false;
OPbuyTPSL=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, CLR_NONE);
if (ND(OrderTakeProfit()) != oTPB || ND(OrderStopLoss()) != oSLB)
{
if (!OrderModify(OrderTicket(), OrderOpenPrice(), oSLB, oTPB, OrderExpiration()))
{
Print(OrderTicket() + " MODIFY TP @ " + DoubleToStr(oTPB, Digits) + " SL @ " + DoubleToStr(oSLB, Digits) + " ");
}
}
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
if (OrderType() == OP_SELL )
{
double oTPS = (bepsell - TP* Point ) * (TP> 0); double oSLS = OrderStopLoss();
if (SL_BEP_minus > 0)
oSLS = (bepsell + SL_BEP_minus * Point );
if (Sell == 1)
{
oTPS = (OrderOpenPrice() - TP * Point ) * (TP> 0); if ( StopLoss > 0)
oSLS = (OrderOpenPrice() + StopLoss * Point );
}
oTPS = ND(oTPS); oSLS = ND(oSLS);
if (Ask <= oTPS)
bool BTPSL=false;
BTPSL=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, CLR_NONE);
if (Ask >= oSLS && oSLS > 0)
bool OPsellTPSL=false;
OPsellTPSL=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, CLR_NONE);
if (ND(OrderTakeProfit()) != oTPS || ND(OrderStopLoss()) != oSLS)
{
if (!OrderModify(OrderTicket(), OrderOpenPrice(), oSLS, oTPS, OrderExpiration()))
{
Print(OrderTicket() + "MODIFY TP @ " + DoubleToStr(oTPS, Digits) + " SL @ " + DoubleToStr(oSLS, Digits) + " ");
}
}
{
Print("OrderSend() error - ", ErrorDescription(GetLastError()));
}
}
}
}
void ReadFileHst(string FileName)
{
int j=0;;
string strFileContents;
int Handle;
int LogFileSize;
int movehigh[1]= {0};
uchar buffer[];
int nNumberOfBytesToRead;
int read[1]= {0};
int i;
double mm;
strFileContents="";
Handle=CreateFileW(FileName,(int)0x80000000,3,0,3,0,0);
if(Handle==-1)
{
Comment("");
return;
}
LogFileSize=GetFileSize(Handle,0);
if(LogFileSize<=0)
{
return;
}
if((LogFileSize-148)/60==BytesToRead)
{
return;
}
SetFilePointer(Handle,148,movehigh,0);
BytesToRead=(LogFileSize-148)/60;
ArrayResize(data,BytesToRead,0);
nNumberOfBytesToRead=60;
ArrayResize(buffer,60,0);
for(i=0; i<BytesToRead; i=i+1)
{
ReadFile(Handle,buffer,nNumberOfBytesToRead,read,NULL);
if(read[0]==nNumberOfBytesToRead)
{
result=StringFormat("0x%02x%02x%02x%02x%02x%02x%02x%02x",buffer[7],buffer[6],buffer[5],buffer[4],buffer[3],buffer[2],buffer[1],buffer[0]);
m_price.buffer[0] = buffer[32];
m_price.buffer[1] = buffer[33];
m_price.buffer[2] = buffer[34];
Показано первые 50% кода (символов: 32551)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.