sa_ea_600.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «sa_ea_600.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
SA_EA_600 — торговый советник для MetaTrader 4, который получает ценовые данные от мастер-сервера через именованный канал Windows и открывает позиции BUY/SELL при достижении заданного уровня отклонения в пипсах от мастер-цен. Торговые решения подтверждаются в течение заданного времени и при условии отсутствия загруженности торгового контекста.
Советник реализует фиксацию прибыли (TargetPips) и защиту убытков (StopPips) для каждой открытой позиции, а также контроль максимальной просадки (MaxDD): при превышении порога вход в новые сделки блокируется. Размер лота рассчитывается на основе параметра MM как процента от свободного маржинального баланса с учётом минимального и максимального размера лота.
Для работы требуется внешний мастер-компонент, передающий данные через именованный канал. Советник поддерживает коррекцию полученных цен, виртуальные стопы, задержку подтверждения, слепой и магический номер для идентификации ордеров. В тестере стратегий цены мастера генерируются искусственно.
Настройки программы
| Настройка | Описание |
|---|---|
| MaxDD | MaxDD — Максимально допустимая просадка в процентах от максимального баланса. При превышении вход в новые сделки блокируется. |
| MM | MM — Параметр управления размером лота в процентах от свободного маржинального баланса. |
| PipeName | PipeName — Имя именованного канала Windows для получения данных от мастер-сервера. |
| BidCorrection | BidCorrection — Коррекция, добавляемая к полученной цене Bid мастера перед расчётами. |
| AskCorrection | AskCorrection — Коррекция, добавляемая к полученной цене Ask мастера перед расчётами. |
| ActionPips | ActionPips — Количество пипсов отклонения от цен мастера, при достижении которого открывается позиция (BUY или SELL). |
| TargetPips | TargetPips — Тейк-профит в пипсах для открытых позиций. |
| StopPips | StopPips — Стоп-лосс в пипсах для открытых позиций. |
| VirtualStops | VirtualStops — Переключатель режима виртуальных стопов: при значении false стопы и тейк-профиты устанавливаются через OrderModify. |
| ConfirmMS | ConfirmMS — Задержка в миллисекундах для повторной проверки условий перед открытием позиции. |
| SleepMS | SleepMS — Интервал ожидания в миллисекундах между итерациями основного цикла советника. |
| Slippage | Slippage — Допустимый проскальзывание в пипсах при исполнении торговых ордеров. |
| Magic | Magic — Магический номер для идентификации ордеров, управляемых советником. |
Поиск по коду файла
extern double MaxDD = 30;
extern double MM = 30;
extern string PipeName = "SA_600";
extern string ServerPairName = "";
extern double BidCorrection = 0;
extern double AskCorrection = 0;
extern int ActionPips = 2;
extern int TargetPips = 5;
extern int StopPips = 15;
extern int VirtualStops = false;
extern int ConfirmMS = 20;
extern int SleepMS = 20;
extern int Slippage = 1;
extern int Magic = 2013;
#define PIPE_BASE_NAME "\\\\.\\pipe\\mt4-" // MUST tally with client code
#define ERROR_MORE_DATA 234
#import "kernel32.dll"
int CallNamedPipeW(string pipeName, uchar& outBuffer[], int outBufferSz, uchar& inBuffer[], int inBufferSz, int& bytesRead[], int timeOut);
#import
datetime StartTime=0;
double MinLots=0.1;
double MaxLots=0.1;
double LotStep=0.1;
double MyPoint=0.0001;
string MasterPair="";
double MaxBalance=0;
double TotalPips=0;
int TotalTrades=0;
double EntrySlippage=0;
int EntryMS=0;
int OpenErrors=0;
int LastTicket=0;
double MasterBid=0;
double MasterAsk=0;
string LastQ="";
int init()
{
// код доступен только после оплаты
}
int deinit()
{
Comment("");
return(0);
}
int start()
{
// код доступен только после оплаты
}
double CurrentPips=0;
string sInfo="";
if(IsStopped() || !IsConnected())
return(0);
if(Digits<=3)
MyPoint=0.01;
MinLots=MarketInfo(Symbol(),MODE_MINLOT);
MaxLots=MarketInfo(Symbol(),MODE_MAXLOT);
LotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
if(StartTime<=0)
{
MaxBalance=AccountBalance();
StartTime=TimeLocal();
TotalPips=0;
EntrySlippage=0;
TotalTrades=0;
EntryMS=0;
LastTicket=0;
OpenErrors=0;
}
while(!IsStopped())
{
RefreshRates();
double dBid=Bid;
double dAsk=Ask;
int OldTicket=LastTicket;
LastTicket=0;
for(int j=OrdersTotal()-1; j>=0; j--)
if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
if((OrderSymbol() == Symbol()) && (OrderMagicNumber() == Magic))
{
if(OrderType()==OP_BUY)
CurrentPips=dBid-OrderOpenPrice();
else
CurrentPips=OrderOpenPrice()-dAsk;
CurrentPips=CurrentPips/MyPoint;
LastTicket=OrderTicket();
if((CurrentPips>=TargetPips || CurrentPips<=-StopPips) && IsTradeContextBusy()==false)
{
if(OrderType()==OP_BUY)
OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(dBid,Digits), Slippage*MyPoint/Point, Blue);
else
OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(dAsk,Digits), Slippage*MyPoint/Point, Red);
}
else
if(VirtualStops==false && OrderStopLoss()<Point && IsTradeContextBusy()==false)
{
double MinDistance=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point+MyPoint;
if(OrderType()==OP_BUY)
OrderModify(OrderTicket(),OrderOpenPrice()
,MathMin(OrderOpenPrice()-StopPips*MyPoint,dBid-MinDistance)
,MathMax(OrderOpenPrice()+TargetPips*MyPoint,dAsk+MinDistance),0);
else
OrderModify(OrderTicket(),OrderOpenPrice()
,MathMax(OrderOpenPrice()+StopPips*MyPoint,dAsk+MinDistance)
,MathMin(OrderOpenPrice()-TargetPips*MyPoint,dBid-MinDistance),0);
}
}
if(LastTicket==0 && OldTicket>0)
if(OrderSelect(OldTicket, SELECT_BY_TICKET, MODE_HISTORY))
{
if(OrderType()==OP_BUY)
TotalPips=TotalPips+(OrderClosePrice()-OrderOpenPrice())/MyPoint;
else
TotalPips=TotalPips+(OrderOpenPrice()-OrderClosePrice())/MyPoint;
}
MaxBalance=MathMax(MaxBalance,AccountBalance());
if(AccountBalance()<=0)
break;
sInfo="";
CheckMaster();
if(MaxDD<=100*(MaxBalance-AccountBalance())/MaxBalance)
sInfo=sInfo+"\nMaximum Drawdawn Reached !!!";
else
if(MasterBid>=Point && MasterAsk>=Point)
sInfo=sInfo+"\nBuy/Sell Levels: "+DoubleToStr((MasterBid-dAsk)/MyPoint-ActionPips,1)+" / "+DoubleToStr((dBid-Показано первые 50% кода (символов: 6497)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.