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

icwr19.mq4

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

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

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

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

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

Важно отметить, что советник не гарантирует прибыль, и его работа зависит от рыночных условий. Все параметры настраиваются через входные переменные, что позволяет адаптировать стратегию под различные инструменты и таймфреймы.

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

НастройкаОписание
if zero, 5m/240m defaults apply (StopLoss) Стоп-лосс — Размер стоп-лосса в пунктах. Если равно нулю, применяются значения по умолчанию в зависимости от таймфрейма.
%account balance to risk per position (MaximumRisk) Максимальный риск — Процент от свободной маржи, используемый для расчета размера позиции при включенном управлении капиталом.
lot size divisor(reducer) during loss streak (DecreaseFactor) Коэффициент уменьшения лота — Делитель размера лота при серии убыточных сделок. Если значение больше нуля, то при наличии убытков размер лота уменьшается пропорционально их количеству.
Magic Магическое число — Уникальный идентификатор (магическое число) для распознавания ордеров, открытых советником.
comment Комментарий к ордерам — Текстовый комментарий, добавляемый к ордерам, открываемым советником.
Получить полный код

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

#include <WinUser32.mqh>

extern double     Min.Wave.Range    =0;      //if zero, 5m/240m defaults apply
extern int        StopLoss          =0;      //if zero, 5m/240m defaults apply
extern double     tsl.divisor       =1.25;

extern int        RSI.TimeFrame     =1440;   //default daily timeframe
extern int        RSI.Period        =14;     //default 14 periods
extern int        RSI.Applied_Price =0;      /*see below, default PRICE_CLOSE

Applied price constants can be any of the following values:

Constant     Value   Description 
PRICE_CLOSE    0     Close price. 
PRICE_OPEN     1     Open price. 
PRICE_HIGH     2     High price. 
PRICE_LOW      3     Low price. 
PRICE_MEDIAN   4     Median price, (high+low)/2. 
PRICE_TYPICAL  5     Typical price, (high+low+close)/3. 
PRICE_WEIGHTED 6     Weighted close price, (high+low+close+close)/4.  */

extern int        RSI.Shift         =0;      //default zero 

extern bool       Use.Money.Mgt     =true;   //if false, uses Minimum.Lot
extern double     Minimum.Lot       =0.1;   //Smallest lot size to trade, Use.MM true or false
extern double     MaximumRisk       =0.02;   //%account balance to risk per position
extern double     DecreaseFactor    =3;      //lot size divisor(reducer) during loss streak
extern double     Lot.Margin        =50;     //Margin for 1 lot   

extern int        Magic             =69;
extern string     comment           ="m icwr.19";

double rsi,temp.high,active.high,temp.low,active.low,r,x,SL,awp1,awp2,high.c,high.r,low.r,low.c;
double rng,sum.rng,avg.rng,adx.plus.di,adx.minus.di;
int a.high.shift,a.low.shift,shift,b,s,cnt,b.ticket,s.ticket;
datetime a.high.time,a.low.time,awt1,awt2;
string FiboName,fib.a,fib.b,TrendName,DR;

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

int deinit(){ 
   int ret=MessageBox("Delete Fibo"+"\'"+"s & TrendLines?",Symbol()+" "+Period()+comment+" Deinitialization",MB_YESNO|MB_ICONQUESTION);
   if(ret==IDYES) {ObjectsDeleteAll(0,OBJ_FIBO);ObjectsDeleteAll(0,OBJ_TREND);}
   return(0);}

int start(){
      // код доступен только после оплаты
   }
   ObjectsDeleteAll(0,OBJ_ARROW);
   if(Bars<288) {return(0);}
double   spread;  spread      =Ask-Bid;
int      slip;    slip        =spread/Point;   

   if(ObjectsTotal(OBJ_FIBO)>0)  {   
      if(ObjectsTotal(OBJ_FIBO)>=3) {
         for(int f.d=0; f.d<ObjectsTotal(OBJ_FIBO);f.d++)   {
            string name.d=ObjectName(f.d);
            if(ObjectsTotal(OBJ_FIBO)>2)  {
               Print("Deleting Fibo ",ObjectName(0));
               ObjectDelete(ObjectName(0));}}}

      if(ObjectsTotal(OBJ_FIBO)==2) {
         for(int f=0;f<ObjectsTotal(OBJ_FIBO);f++) {
            string name=ObjectName(f);
            fib.a=ObjectName(1);//most current
            fib.b=ObjectName(0);}} 

      if(ObjectsTotal(OBJ_FIBO)==1) {
         for(int ff=0;ff<ObjectsTotal(OBJ_FIBO);ff++) {
            name=ObjectName(ff);
            fib.a=ObjectName(0);}}//most current

      if((active.high==0 || active.low==0) && fib.a!="") {
         if(ObjectGet(fib.a,1)<ObjectGet(fib.a,3)) {
            active.low=ObjectGet(fib.a,1);
            a.low.time=ObjectGet(fib.a,0);
            active.high=ObjectGet(fib.a,3);
            a.high.time=ObjectGet(fib.a,2);}
         if(ObjectGet(fib.a,1)>ObjectGet(fib.a,3)) {
            active.high=ObjectGet(fib.a,1);
            a.high.time=ObjectGet(fib.a,0);
            active.low=ObjectGet(fib.a,3);
            a.low.time=ObjectGet(fib.a,2);}}}

   PosCounter();  

   rsi=iRSI(Symbol(),RSI.TimeFrame,RSI.Period,RSI.Applied_Price,RSI.Shift);
   adx.plus.di=iADX(Symbol(),RSI.TimeFrame,RSI.Period,RSI.Applied_Price,MODE_PLUSDI,RSI.Shift);
   adx.minus.di=iADX(Symbol(),RSI.TimeFrame,RSI.Period,RSI.Applied_Price,MODE_MINUSDI,RSI.Shift);

   if(Min.Wave.Range==0)   {
      if(Period()<240)   {
         x=NormalizeDouble(Daily.Range()/2,Digits);
         if(x<1.25*(40*Point)) x=NormalizeDouble(Daily.Range(),Digits);
         if(x<40*Point) x=40*Point;}
      if(Period()>=240) {x=(150*Point);}}
   if(Min.Wave.Range>0) {x=(Min.Wave.Range*Point);}

   if(StopLoss==0)   {
      if(Period()<240)   {
         SL=NormalizeDouble(Daily.Range()/2,Digits);
         if(SL<50*Point) SL=NormalizeDouble(Daily.Range(),Digits);
         if(SL<50*Point) SL=50*Point;}
      if(Period()>=240) {SL=(100*Point);}}
   if(StopLoss>0) {SL=(StopLoss*Point);}

   if(a.high.time>0) {a.high.shift=iBarShift(Symbol(),Period(),a.high.time);}
   if(a.low.time>0)  {a.low.shift=iBarShift(Symbol(),Period(),a.low.time);}

   for(int c=1;r<x;c++)  {
      temp.high=High[Highest(Symbol(),Period(),MODE_HIGH,c,0)];
      if(temp.high>active.high)  {  active.high=temp.high;
                                    a.high.time=iTime(Symbol(),Period(),Highest(Symbol(),Period(),MODE_HIGH,c,0));
                                    a.high.shift=iBarShift(Symbol(),Period(),a.high.time);}
      temp.low=Low[Lowest(Symbol(),Period(),MODE_LOW,c,0)];
      if(temp.low<active.low ||
         active.low<=0)          {  active.low=temp.low;
                                    a.low.time=iTime(Symbol(),Period(),Lowest(Symbol(),Period(),MODE_LOW,c,0));
                                    a.low.shift=iBarShift(Symbol(),Period(),a.low.time);}
      r=(active.high-active.low);   }

   if(a.high.shift<=1 && High[0]>active.high)  {
      ObjectDelete(TimeToStr(a.high.time,TIME_DATE|TIME_MINUTES));//fibo name
      ObjectDelete(TimeToStr(a.low.time,TIME_DATE|TIME_MINUTES));//trend name
      active.high=High[Highest(Symbol(),Period(),MODE_HIGH,a.low.shift,0)];
      a.high.time=iTime(Symbol(),Period(),Highest(Symbol(),5,MODE_HIGH,a.low.shift,0));
      a.high.shift=iBarShift(Symbol(),Period(),a.high.time);}

   if(a.low.shift<=1 && Low[0]<active.low)  {
      ObjectDelete(TimeToStr(a.low.time,TIME_DATE|TIME_MINUTES));//fibo name
      ObjectDelete(TimeToStr(a.high.time,TIME_DATE|TIME_MINUTES));//trend name
      active.low=Low[Lowest(Symbol(),Period(),MODE_LOW,a.high.shift,0)];
      a.low.time=iTime(Symbol(),Period(),Lowest(Symbol(),Period(),MODE_LOW,a.high.shift,0));
      a.low.shift=iBarShift(Symbol(),Period(),a.low.time);}

   shift=0;
   if(a.high.shift<a.low.shift)  shift=a.high.shift;  //upslope
   if(a.low.shift<a.high.shift)  shift=a.low.shift;  //downslope

   if(a.high.shift<a.low.shift)  {         
      if(shift>1 && high.r>0 && Close[Lowest(Symbol(),Period(),MODE_LOW,shift,0)]>high.r) {
         if(High[Highest(Symbol(),Period(),MODE_HIGH,shift,0)]>active.high)   {
            ObjectDelete(TimeToStr(a.high.time,TIME_DATE|TIME_MINUTES));//fibo name
            ObjectDelete(TimeToStr(a.low.time,TIME_DATE|TIME_MINUTES));//trend name
            active.high=High[Highest(Symbol(),Period(),MODE_HIGH,shift,0)];
            a.high.time=iTime(Symbol(),Period(),Highest(Symbol(),5,MODE_HIGH,shift,0));
            a.high.shift=iBarShift(Symbol(),Period(),a.high.time);}}}

   if(a.low.shift<a.high.shift)  {      
      if(shift>1 && low.r>0 && Close[Highest(Symbol(),Period(),MODE_HIGH,shift,0)]<low.r)   {
         if(Low[Lowest(Symbol(),Period(),MODE_LOW,shift,0)]<active.low) {
            ObjectDelete(TimeToStr(a.low.time,TIME_DATE|TIME_MINUTES));//fibo name
            ObjectDelete(TimeToStr(a.high.time,TIME_DATE|TIME_MINUTES));//trend name
            active.low=Low[Lowest(Symbol(),Period(),MODE_LOW,shift,0)];
            a.low.time=iTime(Symbol(),Period(),Lowest(Symbol(),Period(),MODE_LOW,shift,0));
            a.low.shift=iBarShift(Symbol(),Period(),a.low.time);}}}

   if(shift>1 &&
      (High[Highest(Symbol(),Period(),MODE_HIGH,shift,0)]-Low[Lowest(Symbol(),Period(),MODE_LOW,shift,0)]>=x)) {

      active.high=0;a.high.time=0;a.high.shift=0;  active.low=0;a.low.time=0;a.low.shift=0;

      temp.high=High[Highest(Symbol(),Period(),MODE_HIGH,shift,0)];
      if(temp.high>active.high)  {  active.high=temp.high;
                                    a.high.time=iTime(Symbol(),Period(),Highest(Symbol(),Period(),MODE_HIGH,shift,0));
                                    a.high.shift=iBarShift(Symbol(),Period(),a.high.time);}
      temp.low=Low[Lowest(Symbol(),Period(),MODE_LOW,shift,0)];
      if(temp.low<active.low ||
         active.low<=0)          {  active.low=temp.low;
                                    a.low.time=iTime(Symbol(),Period(),Lowest(Symbol(),Period(),MODE_LOW,shift,0));
                                    a.low.shift=iBarShift(Symbol(),Period(),a.low.time);}  }

   if(a.high.shift<a.low.shift)  {
      FiboName=TimeToStr(a.high.time,TIME_DATE|TIME_MINUTES);
      TrendName=TimeToStr(a.low.time,TIME_DATE|TIME_MINUTES);
      if(IsTesting())   {ObjectCreate(FiboName,OBJ_TREND,0,a.low.time,active.low,a.high.time,active.high);
                         ObjectSet(FiboName, OBJPROP_RAY, false);}
      if(!IsTesting()) {
      ObjectCreate(FiboName,OBJ_FIBO,0,a.low.time,active.low,a.high.time,active.high);
      ObjectSet(FiboName, OBJPROP_STYLE, STYLE_DASH);
      ObjectSet(FiboName, OBJPROP_COLOR, HotPink);               
      ObjectSet(FiboName, OBJPROP_WIDTH, 0.5);
      ObjectSet(FiboName, OBJPROP_FIBOLEVELS, 4);

      ObjectSet(FiboName, OBJPROP_FIRSTLEVEL+0, 0.25);
      ObjectSet(FiboName, OBJPROP_FIRSTLEVEL+1, 0.382);
      ObjectSet(FiboName, OBJPROP_FIRSTLEVEL+2, 0.618);
      ObjectSet(FiboNam

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

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

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

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

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

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

Стоимость полного кода
1 414,30₽ ≈ $17.29