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

icwr.20.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 на дневном таймфрейме, и строит уровни Фибоначчи на графике для определения потенциальных точек входа.

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

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

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

НастройкаОписание
if zero, 5m/240m defaults apply (StopLoss) Стоп-лосс — Значение стоп-лосса в пунктах; если равно нулю, применяются значения по умолчанию для таймфреймов 5 минут и 240 минут
%account balance to risk per position (MaximumRisk) Максимальный риск — Процент свободного маржинального баланса, рискуемый на каждую позицию
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 false
extern double     MaximumRisk       =0.02;   //%account balance to risk per position
extern double     Lot.Margin        =50;     //Margin for 1 lot   

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

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 all Fibo 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(a.high.shift<a.low.shift)  {  //down sloping fib         
      if(shift>1 && high.r>0 && Close[Lowest(Symbol(),Period(),MODE_LOW,shift,0)]<high.r &&
      (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.low.shift<a.high.shift)  { //up sloping fib      
      if(shift>1 && low.r>0 && Close[Highest(Symbol(),Period(),MODE_HIGH,shift,0)]>low.r &&
      (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(),Lowes

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

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

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

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

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

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

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