← К каталогу
Исходный код · ID 851

pipschart_revamp_v3p.mq4

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Советник для платформы 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 и перейдите к оплате.

Стоимость полного кода
3 540,10₽ ≈ $43.27