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