pipschart_revamp_v3p.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «pipschart_revamp_v3p.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник для платформы MetaTrader 4, написанный на языке MQL4. Реализует автоматическую торговлю валютными парами на основе анализа диапазонов свечей и индикатора Average True Range (ATR). Использует машину состояний для управления позициями: ожидание сигнала, открытие, удержание, восстановление и разворот.
Советник поддерживает работу с 4- и 5-значными брокерами, фильтрацию по спреду и временные задержки между сделками. Применяет мартингейл-подобное управление лотами с настраиваемыми множителями. Управление ордерами осуществляется через внешние библиотеки Trade.mq4, OA.mq4 и Lib.mq4.
В качестве идентификатора позиций используется магический номер, который может генерироваться автоматически или задаваться вручную. Советник отслеживает текущие ордера, модифицирует стоп-лоссы и тейк-профиты, а также реализует механизмы аварийного закрытия и разворота позиций.
Настройки программы
| Настройка | Описание |
|---|---|
| UseAutoID | Авто ID — Переключатель автоматической генерации магического номера для идентификации ордеров советника |
| User_define_Bot_ID | ID бота — Ручное значение магического номера, используемое при отключённой автоматической генерации |
| Points (UserDefine_SpreadTooHigh) | Макс. спред — Максимально допустимый спред в пунктах, при превышении которого советник не открывает новые позиции |
| init_lot_size | Начальный лот — Размер лота для первого ордера при входе в позицию |
| exponent | Показатель экспоненты — Множитель для расчёта размера лота при наращивании позиции |
| squeeze_factor | Коэффициент сжатия — Коэффициент, влияющий на расчёт целевого уровня прибыли при увеличении позиции |
| atr_range | Период ATR — Период расчёта индикатора Average True Range для оценки волатильности |
| candles_range | Диапазон свечей — Количество свечей для анализа диапазона цены при формировании сигналов |
| Calm_candles | Спокойные свечи — Количество свечей для оценки спокойного диапазона цены |
| Calm_range_info | Единицы диапазона — Текстовое описание единиц измерения порога спокойного диапазона |
| Calm_range | Порог спокойного диапазона — Значение порога диапазона цены в пунктах для фильтрации входов |
| D1_atr_range | Период D1 ATR — Период расчёта ATR на дневном таймфрейме |
| HoldMinutes | Удержание (мин) — Минимальное время в минутах между закрытием и повторным открытием позиции |
| High_Or_Low_Diff | Разница High/Low — Порог разницы между High и Low свечи для условий фильтрации |
| neg_percentile | Отрицательный процентиль — Порог процентильного уровня для фильтрации входящих сигналов |
| barpercentile | Бар процентиль — Номер бара для расчёта процентильного уровня цены |
| bar1 | Бар 1 — Ссылка на номер бара для определения уровня цены High |
| bar2 | Бар 2 — Ссылка на номер бара для определения среднего уровня цены |
| bar3 | Бар 3 — Ссылка на номер бара для определения уровня цены Low |
| TrendValue | Значение тренда — Пороговое значение для определения направления тренда при фильтрации сигналов |
| MoveLarge | Движение Large — Порог расстояния в пунктах для условия крупного движения цены |
| MoveRecent | Движение Recent — Порог расстояния в пунктах для условия недавнего движения цены |
Поиск по коду файла
/*
#include "libraries\Trade.mq4"
#include "libraries\OAmq4"
#include "libraries\Lib.mq4"
*/
#include <Trade.mq4>
#include <OA.mq4>
#include <Lib.mq4>
#include <SmallFunc.mqh>
#include <MQL4OBJ.mqh>
#include <LastOrder.mqh>
#define state_idle 0
#define state_await_buy 500
#define state_await_sell 600
#define state_buy1 1000
#define state_sell1 2000
#define state_buy2 1800
#define state_sell2 2800
#define state_pending_deploy 200
#define state_pending_deploy2 222
#define state_pending_wait 201
#define state_buy2_hold 1900
#define state_sell2_hold 2900
#define state_revbuy_tradesell 1500
#define state_revsell_tradebuy 2500
#define state_revbuy_tradesell_trail 1599
#define state_revsell_tradebuy_trail 2599
#define state_hbuy 301
#define state_hsell 302
#define state_hbuy2 303
#define state_hsell2 304
input bool UseAutoID=true;
input int User_define_Bot_ID=1000;
input int UserDefine_SpreadTooHigh=60; //Points
input double init_lot_size=0.1;
input double exponent=1.44;
input double squeeze_factor=0.3;
input int atr_range=24;
input int candles_range=12;
input int Calm_candles=8;
input string Calm_range_info="unit in point";
input int Calm_range=200;
input int D1_atr_range=10;
input int HoldMinutes=60;
input int High_Or_Low_Diff=40;
input double neg_percentile=0;
input int barpercentile=36;
input int bar1=3;
input int bar2=20;
input int bar3=40;
input int TrendValue=30;
input int MoveLarge=500;
input int MoveRecent=250;
int atr_period=60;
int pendingbuyticket;
int pendingsellticket;
datetime timestamp_buy;
datetime timestamp_sell;
datetime timestamp_close;
datetime MinutesToUnlock_buy;
datetime MinutesToUnlock_sell;
double OrderAcc_buy[25][3];
double OrderAcc_sell[25][3];
int lastticket;
double pl; //pips
double cummpl;
double thisBreakEven; //price
double distance_Loss; //pips
double distance_Gain; //pips
double lots;
double propose_new_stoploss;
double expect_stoploss;
double target_gain;
double new_target_price;
double new_stop_loss;
bool calbreak_flag;
bool TP_is_too_low=false;
double max_gain;
double max_loss;
double estimate_max_loss;
double RRR;
int bbb; //bar count in Isnewbar
datetime laststamp;
datetime BlockBuyUntilTime;
datetime BlockSellUntilTime;
datetime MultiOrderStateTimeStamp;
datetime MultiOrderStateTimeStamp_buy;
datetime MultiOrderStateTimeStamp_sell;
datetime MultiOrderState_Age;
double ThisOpenPrice;
double PercentileSafetyLevel;
int CMD;
double newMark;
int state;
string now;
double tickcount,_tickcount;
static int MAGIC;
string comment_string;
string comments;
int RetError;
double SPREAD;
double X45;
string units;
double DECPIP;
string BROKER45;
double ATR;
double fastATR;
double ATR_Slope;
double dailyATR;
double lowerbound;
double upperbound;
double ge; //gain efficiency
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int start()
{
// код доступен только после оплаты
}
/*
int MAGIC_LIST_BY_SYMBOL()
{
int _magic;
if(Symbol()=="GBPUSD") _magic=100;
if(Symbol()=="EURUSD") _magic=110;
if(Symbol()=="USDCHF") _magic=120;
if(Symbol()=="AUDUSD") _magic=130;
if(Symbol()=="NZDUSD") _magic=140;
if(Symbol()=="USDCAD") _magic=150;
if(Symbol()=="USDJPY") _magic=160;
if(Symbol()=="GBPAUD") _magic=200;
if(Symbol()=="GBPNZD") _magic=210;
if(Symbol()=="GBPCAD") _magic=220;
if(Symbol()=="GBPCHF") _magic=230;
if(Symbol()=="GBPJPY") _magic=240;
if(Symbol()=="EURGBP") _magic=250;
if(Symbol()=="EURAUD") _magic=300;
if(Symbol()=="EURNZD") _magic=310;
if(Symbol()=="EURCAD") _magic=320;
if(Symbol()=="EURCHF") _magic=330;
if(Symbol()=="EURJPY") _magic=340;
return(_magic);
}
bool IsNoPosition()
{
if(OACount(MAGIC,OP_BUY,Symbol())==0 && OACount(MAGIC,OP_SELL,Symbol())==0) return(true);
else return(false);
}
bool IsBuy()
{
if(OACount(MAGIC,OP_BUY,Symbol())==1) return(true);
else return(false);
}
bool IsBuys()
{
if(OACount(MAGIC,OP_BUY,Symbol())>=2) return(true);
else return(false);
}
bool IsNoBuy()
{
if(OACount(MAGIC,OP_BUY,Symbol())==0) return(true);
else return(false);
}
bool IsSell()
{
if(OACount(MAGIC,OP_SELL,Symbol())==1) return(true);
else return(false);
}
bool IsSells()
{
if(OACount(MAGIC,OP_SELL,Symbol())>=2) return(true);
else return(false);
}
bool IsNoSell()
{
if(OACount(MAGIC,OP_SELL,Symbol())==0) return(true);
else return(false);
}
*/
void status(string msg)
{
comments=comments+">>"+now+">>"+msg+"\n";
return;
}
void OrderAccounting()
{
ArrayInitialize(OrderAcc_buy,0);
ArrayInitialize(OrderAcc_sell,0);
int countb=0;
int counts=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
{
if(OrderMagicNumber()==MAGIC)
{
if(OrderType()==OP_BUY)
{
OrderAcc_buy[countb][0]=OrderTicket();
OrderAcc_buy[countb][1]=OrderLots();
OrderAcc_buy[countb][2]=OrderOpenPrice();
countb++;
}
if(OrderType()==OP_SELL)
{
OrderAcc_sell[counts][0]=OrderTicket();
OrderAcc_sell[counts][1]=OrderLots();
OrderAcc_sell[counts][2]=OrderOpenPrice();
counts++;
}
}
}
}
return;
}
double BreakEvenPrice(int side)
{
int size;
int i;
double SumLots=0;
double SumPriceLots=0;
double breakeven=0;
switch(side)
{
case OP_BUY:
{
size=ArraySize(OrderAcc_buy);
for(i=0;i<size;i++)
{
if(OrderAcc_buy[i][0]!=0)
{
SumLots=SumLots+OrderAcc_buy[i][1];
SumPriceLots=SumPriceLots+(OrderAcc_buy[i][1]*OrderAcc_buy[i][2]);
if(SumLots>0) breakeven=SumPriceLots/SumLots;
else Print("BreakEvenPrice:OP_BUY: error SumLots is zero!");
}
}
break;
}
case OP_SELL:
{
size=ArraySize(OrderAcc_sell);
for(i=0;i<size;i++)
{
if(OrderAcc_sell[i][0]!=0)
{
SumLots=SumLots+OrderAcc_sell[i][1];
SumPriceLots=SumPriceLots+(OrderAcc_sell[i][1]*OrderAcc_sell[i][2]);
if(SumLots>0) breakeven=SumPriceLots/SumLots;
else Print("BreakEvenPrice:OP_SELL: error SumLots is zero!");
}
}
break;
}
}
return(breakeven);
}
void ftx(int ticketnumber)
{
double quote=0;
double distance=0Показано первые 50% кода (символов: 35401)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.