monpips_update.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «monpips_update.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
monpips_update.mq4 — торговый советник для MetaTrader 4, реализующий автоматическое управление ордерами и позициями с множеством параметров риск-контроля. Советник работает в двух режимах управления торговлей (Primary и Secondary), размещает отложенные ордера BUYSTOP и SELLSTOP, а также обрабатывает открытые позиции OP_BUY и OP_SELL.
Основные функции включают трейлинг-стоп с настраиваемыми параметрами активации, ограничение дневной прибыли и убытка, фильтрацию по спреду и временным окнам торговли с учётом часового пояса. Советник рассчитывает размер лота на основе процента риска от баланса или фиксированного значения, а также отслеживает скорость изменения цены для принятия торговых решений.
Встроена проверка номера торгового счёта и срока действия лицензии. Система также собирает статистику комиссий на основе истории сделок и отображает текущие параметры торговли на графике в виде информационного панели.
Настройки программы
| Настройка | Описание |
|---|---|
| TradeManager | Менеджер торговли — Режим управления торговлей: Primary — основной режим, Secondary — дополнительный режим обработки ордеров. |
| TradeComment | Комментарий к ордерам — Текстовый комментарий, присваиваемый ордерам для идентификации в истории торгов. |
| MagicNumber | Магическое число — Уникальный идентификатор магического числа, присваиваемый ордерам для их идентификации и управления. |
| Max obchodu (MaxTrades) | Максимальное количество ордеров — Максимальное количество одновременно открытых ордеров и позиций, управляемых советником. |
| Slippage | Проскальзывание — Допустимое проскальзывание цены в пунктах при исполнении ордеров. |
| MaxSpread | Максимальный спред — Максимально допустимый уровень спреда в пунктах. При превышении этого значения размещение ордеров блокируется. |
| FixedLot | Фиксированный лот — Фиксированный размер лота для торговли. Если значение равно 0, лот рассчитывается автоматически на основе процента риска. |
| RiskPercent | Процент риска — Процент риска от баланса счёта, используемый для автоматического расчёта размера лота при нулевом фиксированном лоте. |
| MaxDrawdown | Максимальная просадка — Максимальный допустимый процент просадки от баланса счёта, при превышении которого активируются защитные меры. |
| Max ztrata za den (MaxLoss) | Максимальный убыток за день — Максимальный допустимый дневной убыток в денежном выражении. При его достижении все открытые позиции закрываются. |
| SL | Стоп-лосс — Стоп-лосс в пунктах, устанавливаемый при размещении отложенных ордеров. Если равен 0, стоп-лосс не задаётся. |
| StartHour | Начальный час — Начальный час торгового окна (с учётом смещения GMT), в пределах которого допускается размещение ордеров. |
| EndHour | Конечный час — Конечный час торгового окна (с учётом смещения GMT), в пределах которого допускается размещение ордеров. |
| GMTOffset | Смещение GMT — Смещение часового пояса относительно серверного времени брокера для корректного определения торговых часов. |
| TradeDeviation | Допустимое отклонение — Максимальное количество незащищённых позиций и отложенных ордеров, при превышении которого блокируется открытие новых. |
| TradeDelta | Шаг между ордерами — Шаг в пунктах между последовательными отложенными ордерами при размещении нескольких позиций. |
| Trailing | Расстояние трейлинга — Расстояние трейлинг-стопа в пунктах, на которое перемещается стоп-лосс вслед за ценой. |
| StartTrailing | Начало трейлинга — Минимальное движение цены в пунктах от открытой позиции, после которого активируется трейлинг-стоп. |
| VelocityTrigger | Порог скорости — Пороговое значение изменения цены в пунктах, при котором срабатывает сигнал для размещения ордеров или удаления отложенных позиций. |
| VelocityTime | Время измерения скорости — Временной интервал в секундах для измерения скорости изменения цены и определения момента удаления отложенных ордеров. |
| TickSample | Размер выборки тиков — Количество тиков, используемых для расчёта средней скорости изменения цены и усреднённого спреда. |
Поиск по коду файла
int ActNumber=0;
datetime ExpDate=D'23.12.2025';
#property strict
#property version "3.05"
enum manager {
P=0, // Primary
B=1, // Secondary
};
extern manager TradeManager = 0;
extern string TradeComment = "iFX NET";
extern int MagicNumber = 33431;
extern int MaxTrades=1;//Max obchodu
extern int Slippage = 3;
extern int MaxSpread = 110;
extern double FixedLot = 0;
extern int RiskPercent = 2;
extern int MaxDrawdown = 90;
extern double MaxLoss=500;//Max ztrata za den
extern int SL=0;
extern int StartHour = 2;
extern int EndHour = 22;
extern int GMTOffset = 0;
extern int TradeDeviation = 2;
extern int TradeDelta = 12;
extern int Trailing = 3;
extern int StartTrailing = 4;
extern int VelocityTrigger = 70;
extern int VelocityTime = 7;
int DeleteRatio = 0;
int OrderExpiry = 0;
extern int TickSample = 100;
int r, gmt, brokerOffset, size, digits, stoplevel;
double marginRequirement, maxLot, minLot, lotSize, points, currentSpread, avgSpread, maxSpread, initialBalance, rateChange, rateTrigger, deleteRatio, commissionPoints;
double spreadSize[];
double tick[];
double avgtick[];
int tickTime[];
string testerStartDate, testerEndDate;
int lastBuyOrder, lastSellOrder;
bool calculateCommission = true;
bool closing;
double max = 0;
int init() {
// код доступен только после оплаты
}
void commission(){
if( !IsTesting() ){
double rate = 0;
for( int pos = OrdersHistoryTotal() - 1; pos >= 0; pos-- ) {
if( OrderSelect( pos, SELECT_BY_POS, MODE_HISTORY ) ) {
if( OrderProfit() != 0.0 ) {
if( OrderClosePrice() != OrderOpenPrice() ) {
if( OrderSymbol() == Symbol() ) {
calculateCommission = false;
rate = MathAbs( OrderProfit() / MathAbs( OrderClosePrice() - OrderOpenPrice() ) );
commissionPoints = ( -OrderCommission() ) / rate;
break;
}
}
}
}
}
}
}
int offlineGMT(){
int bkrH = Hour();
int gOffset = bkrH - GMTOffset;
if( gOffset < 0 ) gOffset += 24;
else if( gOffset > 23 ) gOffset -= 24;
return ( gOffset );
}
int start() {
// код доступен только после оплаты
}
int totalBuyStop = 0;
int totalSellStop = 0;
int ticket,pos;
int totalTrades = 0;
int totalUnprotected = 0;
double accountEquity,stop,cena,profdnes=0;
if( calculateCommission ) commission();
gmt = offlineGMT();
prepareSpread();
manageTicks();
if (MaxLoss!=0 && OrdersHistoryTotal()>0)
{
for( pos = 0; pos < OrdersHistoryTotal(); pos++ )
{
r = OrderSelect( pos, SELECT_BY_POS, MODE_HISTORY );
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderCloseTime()>=iTime(Symbol(),PERIOD_D1,0)) profdnes+=OrderProfit() + OrderCommission() + OrderSwap();
}
}
if (!IsTesting() && !IsOptimization() && AccountNumber()!=ActNumber && ActNumber>0) {Comment("\n !! INVALID ACCOUNT NUMBER !!\n !! TRADING IS NOT ALLOWED !!");return(0);}
if(ExpDate>0 && TimeCurrent()>=ExpDate) {Comment("\n*** LICENSE EXPIRED ***");return(0);}
for(pos = OrdersTotal()-1; pos >=0; pos-- )
{
r = OrderSelect( pos, SELECT_BY_POS, MODE_TRADES );
if( OrderSymbol() != Symbol() ) continue;
if( OrderMagicNumber() == MagicNumber ){
totalTrades++;
profdnes+=OrderProfit() + OrderCommission() + OrderSwap();
switch ( OrderType() ) {
case OP_BUYSTOP:
if( (int) TimeCurrent() - lastBuyOrder > VelocityTime )
r = OrderDelete( OrderTicket() );
totalBuyStop++;
totalUnprotected++;
break;
case OP_SELLSTOP:
if( (int) TimeCurrent() - lastSellOrder > VelocityTime )
r = OrderDelete( OrderTicket() );
totalSellStop++;
totalUnprotected++;
break;
case OP_BUY:
accountEquity = AccountBalance() + OrderProfit() + OrderCommission() + OrderSwap();
if( OrderStopLoss() == 0 || ( OrderStopLoss() > 0 && OrderStopLoss() < OrderOpenPrice() ) ) totalUnprotected++;
if( Bid - OrderOpenPrice() > ( Trailing * Point ) + ( StartTrailing * Point ) + commissionPoints ){
if( OrderStopLoss() == 0.0 || Bid - OrderStopLoss() > Trailing * Point )
if( NormalizeDouble( Bid - ( Trailing * Point ), Digits ) != OrderStopLoss() )
r = OrderModify( OrderTicket(), OrderOpenPrice(), NormalizeDouble( Bid - ( Trailing * Point ), Digits ), OrderTakeProfit(), 0 );
} else {
if( accountEquity > max || accountEquity / AccountBalance() < ( double ) MaxDrawdown / 100 ){
if( Bid < OrderOpenPrice() - ( VelocityTrigger * Point ) )
if( OrderStopLoss() == 0.0 || Bid - OrderStopLoss() > ( Trailing * Point ) )
if( NormalizeDouble( Bid - ( Trailing * Point ), Digits ) != OrderStopLoss() )
r = OrderModify( OrderTicket(), OrderOpenPrice(), NormalizeDouble( Bid - ( Trailing * Point ), Digits ), OrderTakeProfit(), 0 );
}
}
break;
case OP_SELL:
accountEquity = AccountBalance() + OrderProfit() + OrderCommission() + OrderSwap();
if( OrderStopLoss() == 0 || ( OrderStopLoss() > 0 && OrderStopLoss() > OrderOpenPrice() ) ) totalUnprotected++;
if( OrderOpenPrice() - Ask > ( Trailing * Point ) + ( StartTrailing * Point ) + commissionPoints ){
if( OrderStopLoss() == 0.0 || OrderStopLoss() - Ask > Trailing * Point )
if( NormalizeDouble( Ask + ( TrailПоказано первые 50% кода (символов: 9781)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.