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

Candle Trader

candles trader.mq4

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

2 to 1 strategy with signals.pineTradingView · 2 общих теговmulti_lot_scalper_a.mq4MQL4 / MetaTrader 4 · 2 общих теговfresh algo signals & overlays v25_6334471093901859175.pineTradingView · 2 общих теговfresh algo v24 tradingview indicator_5918156155804195406.pineTradingView · 2 общих теговlinear regression channel.mq4MQL4 / MetaTrader 4 · 2 общих теговtrading criteria.mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Candle Trader — торговый советник для MetaTrader 4, анализирующий ценовые данные с помощью набора технических индикаторов. Советник обрабатывает событие OnTick, определяет появление новых свечей и при их наступлении оценивает возможности для открытия длинных (BUY) и коротких (SELL) позиций. Перед входом в рынок проверяется достаточность свободного маржа и корректность ключевых параметров.

Для анализа используются скользящие средние LWMA, полосы Боллинджера, MACD, стохастик, импульсный индикатор и ATR. Условия входа в позицию формируются на основе соотношения цены со свечами предыдущего периода, расположения скользящих средних и уровней импульса. Открытие ордеров осуществляется через стандартный торговый API MetaTrader 4.

Советник поддерживает управление позициями: автоматическое перемещение стоп-лосса в безубыток, скользящий стоп-лосс и закрытие позиций по нескольким условиям — движение цены против позиции, пересечение линий MACD и касание полос Боллинджера. Размер позиции рассчитывается с учётом свободного маржа и количества убыточных сделок в истории.

Настройки программы

НастройкаОписание
Enable "no loss" (USEMOVETOBREAKEVEN) Переключатель функции перевода позиции в безубыток. При включении стоп-лосс перемещается на уровень открытия после достижения заданной прибыли.
When to move break even (WHENTOMOVETOBE) Уровень прибыли в пунктах, при достижении которого позиция переводится в безубыток.
How much pips to move sl (PIPSTOMOVESL) Количество пунктов, на которые смещается стоп-лосс при переводе позиции в безубыток.
Lots size (Lots) Базовый размер лота для открытия позиции, используемый при расчёте оптимального объёма.
MaximumRisk Максимальный риск в процентах от свободного маржа, используемый для расчёта размера позиции при открытии.
DecreaseFactor Коэффициент уменьшения лота при наличии убыточных сделок в истории. При значении больше нуля размер позиции снижается пропорционально числу убыточных ордеров.
TrailingStop (TrailingStop) Расстояние в пунктах для активации скользящего стоп-лосса. При значении больше нуля стоп-лосс перемещается вслед за прибыльной позицией.
Stop Loss (Stop_Loss) Значение стоп-лосса в пунктах при открытии позиции.
MagicNumber (MagicNumber) Магический номер, присваиваемый ордерам советника для фильтрации и идентификации его сделок.
TakeProfit (TakeProfit) Значение тейк-профита в пунктах при открытии позиции. Советник прерывает работу, если значение меньше 10.
FastMA (FastMA) Период быстрой скользящей средней (LWMA), используемой для определения краткосрочного тренда.
SlowMA (SlowMA) Период медленной скользящей средней (LWMA), используемой для определения долгосрочного тренда.
Distance (Distance) Допустимое расстояние в пунктах между быстрой и медленной скользящими средними для выполнения условий входа в позицию.
Momentum_Sell (Mom_Sell) Пороговое значение импульса для открытия короткой (SELL) позиции. Сравнивается с абсолютным значением импульсного индикатора.
Momentum_Buy (Mom_Buy) Пороговое значение импульса для открытия длинной (BUY) позиции. Сравнивается с абсолютным значением импульсного индикатора.
Получить полный код

Поиск по коду файла

#property version     "1.00"
#property strict

extern bool        USEMOVETOBREAKEVEN=true;//Enable "no loss"
extern double      WHENTOMOVETOBE=10;      //When to move break even
extern double      PIPSTOMOVESL=5;         //How much pips to move sl
extern double      Lots=0.01;              //Lots size 
input double       MaximumRisk   =0.02;
input double       DecreaseFactor=3;
extern double      TrailingStop=40;        //TrailingStop 
extern double      Stop_Loss=20;           //Stop Loss  
extern int         MagicNumber=1234;       //MagicNumber 
input double       TakeProfit=50;          //TakeProfit
extern int         FastMA=6;               //FastMA 
extern int         SlowMA=85;              //SlowMA
extern double      Distance=5;             //Distance 
extern double      Mom_Sell=0.3;           //Momentum_Sell 
extern double      Mom_Buy=0.3;            //Momentum_Buy  
int total=0;
int           err;
double
Lot,Dmax,Dmin,// Amount of lots in a selected order
Lts,                             // Amount of lots in an opened order
Min_Lot,                         // Minimal amount of lots
Step,                            // Step of lot size change
Free,                            // Current free margin
One_Lot,                         // Price of one lot
Price,                           // Price of a selected order,
pips,
MA_1,MA_2,MA_3,MACD_SIGNAL;
int Type,freeze_level,Spread;

double priceopen,stoploss,takeprofit;

int orderticket;

int
Period_MA_2,  Period_MA_3,       // Calculation periods of MA for other timefr.
Period_MA_02, Period_MA_03,      // Calculation periods of supp. MAs
K2,K3,T;

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {
  }

void OnTick(void)
  {
      // код доступен только после оплаты
   }

void stop()
  {
   int cnt;

   double middleBB=iBands(Symbol(),0,20, 2,0,0,MODE_MAIN,1);//middle
   double lowerBB=iBands(Symbol(),0,20, 2,0,0,MODE_LOWER,1);//lower
   double upperBB=iBands(Symbol(),0,20, 2,0,0,MODE_UPPER,1);//upper

   double  MacdMAIN=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   double  MacdSIGNAL=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

   for(cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {

         if(OrderType()==OP_BUY)
           {

            if(((Bid<OrderOpenPrice()-iATR(NULL,0,14,0))
               || ((MacdMAIN>0 && MacdMAIN<MacdSIGNAL) || (MacdMAIN<0 && (MathAbs(MacdMAIN)>MathAbs(MacdSIGNAL))))
               || Close[1]==upperBB))
               exitbuys();

           }
         else // go to short position
           {

            if(((Ask>OrderOpenPrice()+iATR(NULL,0,14,0))
               || ((MacdMAIN>0 && MacdMAIN>MacdSIGNAL) || (MacdMAIN<0 && (MathAbs(MacdMAIN)<MathAbs(MacdSIGNAL)))))
               || Close[1]==lowerBB)
               exitsells();

           }
        }
     }
  }

void Trail1()
  {
   total=OrdersTotal();

   for(int cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {

         if(OrderType()==OP_BUY)
           {

            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>pips*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-pips*TrailingStop)
                    {

                     RefreshRates();
                     stoploss=Bid-(pips*TrailingStop);
                     takeprofit=OrderTakeProfit()+pips*TrailingStop;
                     double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
                     if(stoploss<StopLevel*pips) stoploss=StopLevel*pips;
                     string symbol=OrderSymbol();
                     double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
                     if(MathAbs(OrderStopLoss()-stoploss)>point)
                        if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)

                           if(CheckStopLoss_Takeprofit(OP_BUY,stoploss,takeprofit))
                              if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
                                 if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Green))
                                    

Показано первые 50% кода (символов: 13285)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 328,50₽ ≈ $16.24