icwr.20.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «icwr.20.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торгового советника для платформы 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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.