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

turtletraderv1_0_1.mq4

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

oozaru pro(1).mq4MQL4 / MetaTrader 4 · 3 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 2 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 2 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedingvonepointoneone.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedging 1.10 optimized.mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Данный продукт представляет собой торгового советника для платформы MetaTrader 4, написанный на языке MQL4. Советник автоматизирует процесс принятия торговых решений, используя комбинацию нескольких технических индикаторов и анализ свечных паттернов для определения направления входа в позицию.

В работе используются такие индикаторы, как Stochastic, CCI, RSI, ADX, Momentum, скользящие средние и циклический осциллятор, а также распознаются классические модели японских свечей. Советник оценивает сигналы нескольких источников и формирует итоговое решение о покупке или продаже на основе агрегированных данных.

Поддерживаются ручная и автоматическая установка объёма лота с учётом риска и лимита максимального размера. Встроены средства управления рисками: стоп-лосс, тейк-профит, механизм Мартингейла и восстановление позиции после убытка. Доступны ограничения по времени торговых операций, а также возможность отключить торговлю в направлении покупки или продажи.

Советник работает на таймфрейме M1 для логики выхода из позиций и способен одновременно обрабатывать ордера на текущем символе. При обнаружении убыточного ордера возможен обратный вход с корректировкой размера лота.

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

НастройкаОписание
Autor Автор — Текстовый параметр, содержащий имя автора программы.
Desc1 Описание 1 — Текстовый параметр для дополнительной информации.
Desc2 Описание 2 — Текстовый параметр для дополнительной информации.
Desc3 Описание 3 — Текстовый параметр для дополнительной информации.
ShowMarketInfo Отображение рыночной информации — Переключатель вывода информации о рынке в журнал.
Slippage rates (SlipPage) Проскальзывание — Допустимое проскальзывание в пунктах.
Number of lots (Lots) Размер лота — Фиксированный размер лота при ручном режиме.
StopLoss Стоп-лосс — Фиксированное значение стоп-лосса в пунктах.
TakeProfit Тейк-профит — Фиксированное значение тейк-профита в пунктах.
MAGIC Магический номер — Магический номер для идентификации ордеров, созданных советником.
StopLossRecover Восстановление по стоп-лоссу — Переключатель восстановления убыточной позиции обратным ордером.
NotSell Запрет продажи — Переключатель для отключения входов в позицию продажи.
NotBuy Запрет покупки — Переключатель для отключения входов в позицию покупки.
Martingale Мартингейл — Переключатель механизма Мартингейла при восстановлении убыточных позиций.
MartingaleStep Шаг Мартингейла — Шаг увеличения лота при активном Мартингейле.
AutoLots Автоматический лот — Переключатель автоматического расчёта размера лота на основе баланса, риска и доступной маржи.
MAXLots Максимальный лот — Максимально допустимый размер лота при автоматическом расчёте.
SymbolsCount Количество символов — Количество символов, участвующих в автоматическом расчёте лота.
Risk Коэффициент риска — Коэффициент риска, используемый при автоматическом расчёте лота.
PauseMin Пауза в минутах — Пауза в минутах после закрытия ордера перед следующим входом.
FromHourStop1 Начало часа стоп 1 — Начало временного окна для ограничения торговли (первая группа).
ToHourStop1 Конец часа стоп 1 — Окончание временного окна для ограничения торговли (первая группа).
FromHourStop2 Начало часа стоп 2 — Начало временного окна для ограничения торговли (вторая группа).
ToHourStop2 Конец часа стоп 2 — Окончание временного окна для ограничения торговли (вторая группа).
FromHourStop3 Начало часа стоп 3 — Начало временного окна для ограничения торговли (третья группа).
ToHourStop3 Конец часа стоп 3 — Окончание временного окна для ограничения торговли (третья группа).
FromHourStop4 Начало часа стоп 4 — Начало временного окна для ограничения торговли (четвёртая группа).
ToHourStop4 Конец часа стоп 4 — Окончание временного окна для ограничения торговли (четвёртая группа).
StoKperiod Период K стохастика — Период основной линии стохастика.
StoDperiod Период D стохастика — Период сигнальной линии стохастика.
StoSlowing Замедление стохастика — Параметр замедления стохастика.
MASlowTime Период медленной СС — Период медленной скользящей средней, используемой для фильтрации входов.
MAFastTime Период быстрой СС — Период быстрой скользящей средней, используемой для фильтрации входов.
CCITime Период CCI — Период расчёта индикатора CCI.
CHOTime Период CHO — Период расчёта циклического осциллятора CHO.
RSITime Период RSI — Период расчёта индикатора RSI.
ADX Период ADX — Период расчёта индикатора ADX для определения трендовости рынка.
MomentTime Период Momentum — Период расчёта индикатора Momentum.
Получить полный код

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

#define DECISION_BUY 1
#define DECISION_SELL 0
#define DECISION_UNKNOWN -1

#define STC_UNCLEAR 0
#define STC_REVERS_UP 1
#define STC_REVERS_DOWN 2
#define STC_SUPER_UP 3
#define STC_SUPER_DOWN 4

extern string Autor = "Thrinai Chankong";
extern string Desc1 = "If you want to donate me";
extern string Desc2 = "can pay to paypal: t*****i*@hotmail.com";
extern string Desc3 = "Thanks a lot";
extern bool ShowMarketInfo = false;
extern double SlipPage = 1; // Slippage rates
extern double Lots = 0.1; // Number of lots
extern double StopLoss = 0;
extern double TakeProfit = 0;
extern double MAGIC = 12357951;
extern bool StopLossRecover = true;
extern bool NotSell = false;
extern bool NotBuy = false;
extern bool Martingale = false;
extern int MartingaleStep = 0;
extern bool AutoLots = false;
extern double MAXLots = 10;
extern double SymbolsCount = 2;
extern double Risk = 0.7;
extern int PauseMin  =  0;
extern int FromHourStop1  =  25;
extern int ToHourStop1  =  25;
extern int FromHourStop2  =  25;
extern int ToHourStop2  =  25;
extern int FromHourStop3  =  25;
extern int ToHourStop3  =  25;
extern int FromHourStop4  =  25;
extern int ToHourStop4  =  25;
extern int StoKperiod=4;
extern int StoDperiod=3;
extern int StoSlowing=3; 
extern int MASlowTime =  15;
extern int MAFastTime =  3;
extern int CCITime =  5;
extern int CHOTime=5;
extern int RSITime=6;
extern int ADX=6;
extern int MomentTime=5; 

double downArrow[];
double BestPrice1=0;
double BestPrice2=0;
double mMultiply=1;
double BeforeLoss;

double BidPrev = 0;
double AskPrev = 0;
double CHOCurrent;
double CHOPrevious;
int StopLossIndex =  0;
int TakeProfitIndex  =  0;
int ToSell=0;
int ToBuy =0;
int FoundOpenedOrder = false;
int Decision;
int PrevDecision;
int ticket,total,cnt;
datetime PauseTo;
static datetime Old_Time=0;
double CHOCurrentExit,CHOPreviousExit,RSICurrentExit,RSIPreviousExit;

double pipe;

double ModeLow;
double ModeHigh;
double ModeTime;
double ModeBid;
double ModeAsk;
double ModePoint;
double ModeDigits;
double ModeSpread;
double ModeStopLevel;
double ModeLotSize;
double ModeTickValue;
double ModeTickSize;
double ModeSwapLong;
double ModeSwapShort;
double ModeStarting;
double ModeExpiration;
double ModeTradeAllowed;
double ModeMinLot;
double ModeLotStep;

   double STOCHCurrent;
   double STOCHPrevious;
   double STOCHSigCurrent;
   double STOCHSigPrevious;
   int STOCH_Status;

   double CCICurrent;
   double CCIPrevious;
   int CCI_Status;

   double RSICurrent;
   double RSIPrevious;
   int RSI_Status;

   int CandleStatus;
   int MACDStatus;

   double MomentCurrent;
   double MomentPrevious;

   double P,R,R05,R10,R15,R20,R25,R30,S05,S10,S15,S20,S25,S30;

   double StopLossValue=0;
   double TakeProfitValue=0;
   bool IsNewBar = false;
   datetime New_Time[1];
   int copied=0;

int GetMarketInfo()
  {
   ModeLow = MarketInfo(Symbol(), MODE_LOW);
   ModeHigh = MarketInfo(Symbol(), MODE_HIGH);
   ModeTime = MarketInfo(Symbol(), MODE_TIME);
   ModeBid = MarketInfo(Symbol(), MODE_BID);
   ModeAsk = MarketInfo(Symbol(), MODE_ASK);
   ModePoint = MarketInfo(Symbol(), MODE_POINT);
   ModeDigits = MarketInfo(Symbol(), MODE_DIGITS);
   ModeSpread = MarketInfo(Symbol(), MODE_SPREAD);
   ModeStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
   ModeLotSize = MarketInfo(Symbol(), MODE_LOTSIZE);
   ModeTickValue = MarketInfo(Symbol(), MODE_TICKVALUE);
   ModeTickSize = MarketInfo(Symbol(), MODE_TICKSIZE);
   ModeSwapLong = MarketInfo(Symbol(), MODE_SWAPLONG);
   ModeSwapShort = MarketInfo(Symbol(), MODE_SWAPSHORT);
   ModeStarting = MarketInfo(Symbol(), MODE_STARTING);
   ModeExpiration = MarketInfo(Symbol(), MODE_EXPIRATION);
   ModeTradeAllowed = MarketInfo(Symbol(), MODE_TRADEALLOWED);
   ModeMinLot = MarketInfo(Symbol(), MODE_MINLOT);
   ModeLotStep = MarketInfo(Symbol(), MODE_LOTSTEP);

   if ( ShowMarketInfo == True )
     {
       Print("ModeLow:",ModeLow);
       Print("ModeHigh:",ModeHigh);
       Print("ModeTime:",ModeTime);
       Print("ModeBid:",ModeBid);
       Print("ModeAsk:",ModeAsk);
       Print("ModePoint:",ModePoint);
       Print("ModeDigits:",ModeDigits);
       Print("ModeSpread:",ModeSpread);
       Print("ModeStopLevel:",ModeStopLevel);
       Print("ModeLotSize:",ModeLotSize);
       Print("ModeTickValue:",ModeTickValue);
       Print("ModeTickSize:",ModeTickSize);
       Print("ModeSwapLong:",ModeSwapLong);
       Print("ModeSwapShort:",ModeSwapShort);
       Print("ModeStarting:",ModeStarting);
       Print("ModeExpiration:",ModeExpiration);
       Print("ModeTradeAllowed:",ModeTradeAllowed);
       Print("ModeMinLot:",ModeMinLot);
       Print("ModeLotStep:",ModeLotStep);
     }
   return (0);
  }

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

int EnterMarket()
{
   double MAFastCurrent,MAFastPrev,MASlow,diffMA;

   double Lowest,Highest,diffFibo;
   double P1000,P000,P236,P382,P500,P618,P786;
   int CountLow=0;
   int CountHigh=0;

   if(Lots == 0)
     {
       return (0);
     }

   int h=TimeHour(CurTime());
   int hadj=TimeHour(CurTime());

   if (((hadj >= FromHourStop1) &&(hadj <= ToHourStop1)) || ((hadj >= FromHourStop2) &&(hadj <= ToHourStop2)) || ((hadj >= FromHourStop3) &&(hadj <= ToHourStop3))|| ((hadj >= FromHourStop4) &&(hadj <= ToHourStop4))) {
         return (0);
      }
    if(CurTime()<PauseTo){
         return(0);
    }

   if(StopLoss>0){
      StopLossIndex  =  StopLoss/Lots;
   }
   if(TakeProfit>0){
      TakeProfitIndex   =  TakeProfit/Lots;
   }

   Lowest = Low[iLowest(NULL,0,MODE_LOW,180,1)];
   Highest = High[iHighest(NULL,0,MODE_HIGH,180,1)];
   diffFibo= Highest-Lowest;
   P1000 =  Highest;
   P000  =  Lowest;
   P236  =  Lowest+(diffFibo*0.236);
   P382  =  Lowest+(diffFibo*0.382);
   P500  =  Lowest+(diffFibo*0.5);
   P618  =  Lowest+(diffFibo*0.618);
   P786  =  Lowest+(diffFibo*0.786);

   AskRSI();
   AskStochastic();
   AskCCI();

    if(Decision==DECISION_BUY && NotBuy==false){

      MAFastCurrent=iMA(NULL,0,MAFastTime,0,MODE_SMMA,PRICE_CLOSE,0);
      MAFastPrev=iMA(NULL,0,MAFastTime,0,MODE_SMMA,PRICE_CLOSE,1);
      MASlow=iMA(NULL,0,MASlowTime,1,MODE_SMMA,PRICE_CLOSE,0);
      diffMA   =  MathAbs(MAFastCurrent-MASlow/Point);
      if((MAFastCurrent<MASlow || MAFastCurrent<MAFastPrev) || (diffMA<20)){
         return(0);
      }
      if(STOCHCurrent<88){
         if(CCIPrevious>CCICurrent){
            return(0);
         }

         if((RSIPrevious>RSICurrent)|| (RSICurrent>70)){
            return(0);
         }
      }

      if(CHOPrevious>CHOCurrent){
         return(0);
      }
      MomentCurrent = iMomentum(NULL,0,MomentTime,PRICE_CLOSE,0);
      MomentPrevious = iMomentum(NULL,0,MomentTime,PRICE_CLOSE,1);

      if(MomentPrevious>MomentCurrent){
         return(0);
      }

       if(Ask<Highest && Ask>Lowest){

         if(Ask>=(P236-(Point*5))&& Ask<=(P236+(Point*5))){
            return(0);
         }
          if(Ask>=(P382-(Point*5))&& Ask<=(P382+(Point*5))){
             return(0);
          }
          if(Ask>=(P500-(Point*5))&&Ask<=(P500+(Point*5))){
            return(0);
          }
          if(Ask>=(P618-(Point*5)) && Ask<=(P618+(Point*5))){
          return(0);

          }
          if(Ask>=(P786-(Point*5))&& Ask<=(P786+(Point*5))){
            return(0);
          }

      }

     /* for(int i=1;i<90;i++){
         if(iOpen(NULL,0,i)>iClose(NULL,0,i)){

         }
         if(iOpen(NULL,0,i)<iClose(NULL,0,i)){
            if(iClose(NULL,0,i)>CBuy){
               CBuy=iClose(NULL,0,i);               
            }else if(iClose(NULL,0,i)==CBuy){
               CountHigh++;
            }
            if(CountHigh==2){
               break;
            }
         }
      }
      if(CountHigh>1){
         if(CBuy<=Ask){
            TradeSell();
            return(0);
         }
      }*/

      TradeBuy();
      return(0);

    }else if(Decision==DECISION_SELL && NotSell==false){
      MAFastCurrent=iMA(NULL,0,MAFastTime,0,MODE_SMMA,PRICE_OPEN,0);
      MAFastPrev=iMA(NULL,0,MAFastTime,0,MODE_SMMA,PRICE_OPEN,1);
      MASlow=iMA(NULL,0,MASlowTime,1,MODE_SMMA,PRICE_OPEN,0);
      diffMA   =  MathAbs(MAFastCurrent-MASlow/Point);
      if((MAFastCurrent>MASlow || MAFastCurrent>MAFastPrev) || (diffMA<20)){
         return(0);
      }
      MomentCurrent = iMomentum(NULL,0,MomentTime,PRICE_CLOSE,0);
      MomentPrevious = iMomentum(NULL,0,MomentTime,PRICE_CLOSE,1);

      if(STOCHCurrent>12){
         if(CCIPrevious<CCICurrent){
            return(0);
         }

         if((RSIPrevious<RSICurrent)|| (RSICurrent<30)){
            return(0);
         }
      }

      if(CHOPrevious<CHOCurrent){
         return(0);
      }

      if(MomentPrevious<MomentCurrent){
         return(0);
      }

       if(Bid<Highest && Bid>Lowest){

        if(Bid>=(P236-(Point*5))&& Bid<=(P236+(Point*5))){
            return(0);
         }
          if(Bid>=(P382-(Point*5))&& Bid<=(P382+(Point*5))){
             return(0);
          }
          if(Bid>=(P500-(Point*5))&&Bid<=(P500+(Point*5))){
            return(0);
          }
          if(Bid>=(P618-(Point*5)) && Bid<=(P618+(Point*5))){
          return(0);

          }
          if(Bid>=(P786-(Point*5))&& Bid<=(P786+(Point*5))){
            return(0);
          }

      }

      /*for(i=1;i<90;i++){
         if(iOpen(NULL,0,i)>iClose(NULL,0,i)){
            if(iClose(NULL,0,i)<CSell){
               CSell=iClose(NULL,0,i);
            }else if(iClose(NULL,0,i)==CSell){
               CountLow++;
            }
            if(CountLow==2){
               break;
            }
         }

      }
      if(CountLow>1){
         if(CSell>=Bid){
            TradeBuy();
            return(0);
         }
      }*/

      TradeSell();
      return(0);

    }

   return (0);
}   

int TradeBuy(){
   if(StopLoss>0){
         StopLossValue  =  Bid-(Point*StopLossIndex*mMultiply);
      }
      if(TakeProfit>0){
         TakeProfitValue   = Ask+(Point*TakeProfitIndex*mMultiply);
      }

       ticket = OrderSend(Symbol(),OP_BUY,Lots*mMultiply,Ask,3,0,0,"TurtleTrader(BUY)",MAGIC,3,Green);
       if(ticket  > 0){
        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
           OrderModify(OrderTicket(), OrderOpenPrice(), StopLossValue, TakeProfitValue, 3, Green);
	}
            PrevDecision=Decision;
            Print("Buy order is opened: ",OrderOpenPrice());
       }else{
            Print("Error opening BUY order:",GetLastError());

       }
       return(0);
}

int TradeSell(){
      if(StopLoss>0){
         StopLossValue  =  Bid+(Point*StopLossIndex*mMultiply);
      }
      if(TakeProfit>0){
         TakeProfitValue   = Ask-(Point*TakeProfitIndex*mMultiply);
      }

      ticket = OrderSend(Symbol(),OP_SELL,Lots*mMultiply,Bid,3,0,0,"TurtleTrader(SELL)",MAGIC,3,Red);
      if(ticket  > 0){
         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
            OrderModify(OrderTicket(), OrderOpenPrice(), StopLossValue, TakeProfitValue, 3, Green);
         }
         PrevDecision=Decision;
         Print("Sell order is opened: ",OrderOpenPrice());
      }else{
         Print("Error opening SELL order:",GetLastError());

      }
      return(0);
}

int AskStochastic()
{
   CHOCurrent = iCustom(NULL,0,"CHO",CHOTime,3,0,1,0);
   CHOPrevious = iCustom(NULL,0,"CHO",CHOTime,3,0,1,1);

   STOCHCurrent = iStochastic(NULL,0,StoKperiod,StoDperiod,StoSlowing,MODE_SMA,0,MODE_MAIN,0);
   STOCHPrevious = iStochastic(NULL,0,StoKperiod,StoDperiod,StoSlowing,MODE_SMA,0,MODE_MAIN,1);

   if(STOCHCurrent>50 && STOCHCurrent<88 ){
         if(CHOCurrent>10){
            STOCH_Status   =  DECISION_BUY;

         }else if(CHOCurrent<-10){
            STOCH_Status   =  DECISION_SELL;

        }
   }else if(STOCHCurrent<=12){
        STOCH_Status   =  DECISION_SELL;

   }else if(STOCHCurrent>=88){
        STOCH_Status   =  DECISION_BUY;

   }else if(STOCHCurrent<50 && STOCHCurrent>12){
        if(CHOCurrent>10){
            STOCH_Status   =  DECISION_BUY;

         }else if(CHOCurrent<-10){
            STOCH_Status   =  DECISION_SELL;

        }
   }
   return (0);
}

int AskCCI()
{

   CCICurrent = iCCI(NULL,0,CCITime,PRICE_TYPICAL,0);
   CCIPrevious = iCCI(NULL,0,CCITime,PRICE_TYPICAL,1);

   if((CCICurrent>CCIPrevious)&&(CCICurrent<75)){
        CCI_Status   =  DECISION_BUY;

   }else if((CCICurrent<CCIPrevious)&&(CCICurrent>=-75)){
        CCI_Status   =  DECISION_SELL;

   }
   return (0);
}

int AskRSI()
{

   RSICurrent = iRSI(NULL,0,RSITime,PRICE_CLOSE,0);
   RSIPrevious = iRSI(NULL,0,RSITime,PRICE_CLOSE,1);
   RSI_Status   =  DECISION_UNKNOWN;

   if(RSICurrent>=50){
        RSI_Status   =  DECISION_BUY;

   }else if(RSICurrent<50){
        RSI_Status   =  DECISION_SELL;

   }
   return (0);
}

int ExitMarket ()
  {

   CHOCurrentExit = iCustom(NULL,PERIOD_M1,"CHO",CHOTime,3,0,1,0);
   CHOPreviousExit = CHOPrevious;

   RSICurrentExit 

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

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

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

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

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

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

Стоимость полного кода
1 843,60₽ ≈ $22.54