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

aschq.mq4

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

#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 2 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговgeniusv101-ecn.mq4MQL4 / MetaTrader 4 · 2 общих теговmarket crusher ea guidlines.txtMQL · 2 общих тегов2 to 1 strategy with signals.pineTradingView · 2 общих теговfresh algo signals & overlays v25_6334471093901859175.pineTradingView · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

ASC++ — торговый советник для платформы MetaTrader 4, реализующий автоматическую торговлю на основе комбинации индикатора Williams %R, усреднённого диапазона ценовых колебаний и анализа истинного диапазона движения. Советник формирует сигналы на покупку и продажу, выставляет стоп-ордера на вход и управляет открытыми позициями через торговый API MetaTrader 4.

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

Советник работает только с текущим символом и поддерживает одновременное управление несколькими ордерами одного типа. Все торговые операции выполняются через стандартные функции OrderSend, OrderModify и OrderClose с контролем проскальзывания.

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

НастройкаОписание
Lots Объём лота — Объём торговой позиции в лотах, передаваемый в OrderSend при открытии стоп-ордера.
TakeProfit Тейк-профит — Расстояние в пунктах от цены входа для установки уровня фиксации прибыли в стоп-ордере.
StopLoss Стоп-лосс — Расстояние в пунктах от цены входа для установки уровня стоп-лосса в стоп-ордере.
TrailingStop Трейлинг-стоп — Параметр, объявленный как входной, но в текущей версии кода не используется напрямую в логике управления позицией.
Risk Уровень риска — Влияет на чувствительность сигналов и пороговые уровни входа: изменяет базовые значения x1, x2 и value10.
EntryStopLevel Уровень стоп-ордера — Расстояние в пунктах от текущей цены, на которое смещается цена размещения стоп-ордера на вход.
EntryRange Диапазон входа — Максимальный усреднённый диапазон колебаний в пунктах, при котором допускается вход в позицию.
TSLevel1 Уровень трейлинга 1 — Первый порог прибыли в пунктах от цены входа, при достижении которого активируется первая модификация стоп-лосса.
TSLevel2 Уровень трейлинга 2 — Второй порог прибыли в пунктах от цены входа, при достижении которого стоп-лосс перемещается на более дальний уровень.
SigValMin Минимальное значение сигнала — Минимальная сила сигнала, необходимая для подтверждения условия входа в позицию.
Sllipage (Slippage) Проскальзывание — Максимально допустимое проскальзывание в пунктах при размещении и закрытии ордеров.
Получить полный код

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

extern double Lots = 0.10;
extern int TakeProfit = 100;
extern int StopLoss = 40;
extern int TrailingStop = 20;

extern int  Risk=3;
extern int  EntryStopLevel=10;
extern int  EntryRange=27;
extern int  TSLevel1=30;
extern int  TSLevel2=60;
extern int  SigValMin=5;
extern int  Slippage=3;    // Sllipage

double value2=0, value3=0, x1=70, x2=30;
double TrueCount=0,Range=0, AvgRange=0, MRO1=0, MRO2=0;
double val1=0, val2=0,t0=0,TradesOnSymbol=0;
double AvgRange3=0,price2=0,value30=0,dK2=0;
double V1=0,V2=0,P1=9,n1=9,n2=49,V3=0,V4=0,P2=54,wprfast=0,wprslow=0,cnt=0;
double value=0,price=0,dK=0, AvgRange2=0,WATR=0,AveragePeriod=10,Reg=1;
double ESLevel=0,vartime=0,SigValBuy=0,SigValSell=0,SigValBuy1=0,SigValSell1=0,timecntsell=0,timecntbuy=0,sl=0;
double nrtrr[10],nrtrg[10],nrtrwatrr[10],nrtrwatrg[10],ascsigbuy[30],ascsigsell[30],Table_value2[50];
int    i=0,StartBars=1,bar=0,trend=0,trend2=0,shift=0,Counter=0,i1=0,cnt1=0,value10=10,value11=0;

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

int deinit()
  {

   return(0);
  }

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

value10=3+Risk*2;
x1=67+Risk;
x2=33-Risk;
value11=value10;

       wprfast=0;
       wprslow=0;

       V1=iWPR(NULL,0,P1,cnt)*iWPR(NULL,0,P1,0)/100;
       V2=MathCeil(V1);
       if (V2<n1)  wprfast=V2;
	    if (V2>n2)  wprfast=-(V2);

	   V3=iWPR(NULL,0,P2,cnt)*iWPR(NULL,0,P2,0)/100;
       V4=MathCeil(V3);
       if (V4<n1)  wprslow=V4;
	    if (V4>n2)  wprslow=-(V4);

AvgRange2=0;
for (i=AveragePeriod;i>=1; i--) {
       dK = 1+(AveragePeriod-i)/AveragePeriod;
       AvgRange2=AvgRange2+ dK*MathAbs(High[i]-Low[i]);
       }
WATR = AvgRange2/AveragePeriod;

if (Close[StartBars-1] > Open[StartBars-1]) {
   value = Close[StartBars - 1] * (1 - WATR);
   trend = 1;
   nrtrwatrg[0]= value;
   nrtrwatrr[0]= 0;
   }

if (Close[StartBars-1] < Open[StartBars-1]) {
   value = Close[StartBars - 1] * (1 + WATR);
   trend = -1;
   nrtrwatrr[0]= value;
   nrtrwatrg[0]= 0;
   }

for (bar=50;bar>=0; bar--) {

    if (trend >= 0)  {
       if (Close[bar] > price)  price = Close[bar];
       value = price * (1 - WATR);
       if (Close[bar] < value)  {
          price = Close[bar];
          value = price * (1 + WATR);
          trend = -1;
          }
       }
    else
    if (trend <= 0) {
       if (Close[bar] < price)  price = Close[bar];
       value = price * (1 + WATR);
       if (Close[bar] > value) {
          price = Close[bar];
          value = price * (1 - WATR);
          trend = 1;
          }
       }

if (trend == -1) {
       nrtrwatrr[bar]= value;
       nrtrwatrg[bar]= 0;
       }
if (trend ==  1) {
       nrtrwatrg[bar]= value;
       nrtrwatrr[bar]= 0;
       }
} 

AvgRange3=0;
for (i=1; i<=AveragePeriod; i++) {
    AvgRange3=AvgRange3 + MathAbs(High[i]-Low[i]);
    }
dK2 = AvgRange3/AveragePeriod;

if (Close[0] > Open[0]) {
   value30 = Close[0] * (1 - dK2);
   trend2 = 1;
   nrtrg[0]= value30;
   nrtrr[0]=0;
   }
if (Close[0] < Open[0]) {
   value30 = Close[0] * (1 + dK2);
   trend2 = -1;
   nrtrr[0]=value30;
   nrtrg[0]=0;
   }
for (bar = 50; bar>=0; bar--) {
    if (trend2 >= 0){
       if (Close[bar] > price2) price2 = Close[bar];
       value30 = price2 * (1 - dK2);
       if (Close[bar] < value30) {
          price2 = Close[bar];
          value30 = price2 * (1 + dK2);
          trend2 = -1;
          }
       } 
    else 
    if (trend2 <= 0) {
       if (Close[bar] < price2) price2 = Close[bar];
       value30 = price2 * (1 + dK2);
       if (Close[bar] > value30) {
          price2 = Close[bar];
          value30 = price2 * (1 - dK2);
          trend2 = 1;
          }
       }
if (trend2 == -1) {
       nrtrr[bar]= value30;
       nrtrg[bar]= 0;
       }
if (trend2 ==  1) {
       nrtrg[bar]= value30;
       nrtrr[bar]= 0;
       }
} 

for (shift=30; shift>=0; shift--) {

   Counter=shift;
	Range=0.0;
	AvgRange=0.0;
	for (Counter=shift; Counter<=shift+9; Counter++) AvgRange=AvgRange+MathAbs(High[Counter]-Low[Counter]);

	Range=AvgRange/10;
	Counter=shift;
	TrueCount=0;
	while (Counter<shift+9 && TrueCount<1)
		{if (MathAbs(Open[Counter]-Close[Counter+1])>=Range*2.0) TrueCount=TrueCount+1;
		Counter=Counter+1;
		}
	if (TrueCount>=1) {MRO1=Counter;} else {MRO1=-1;}
	Counter=shift;
	TrueCount=0;
	while (Counter<shift+6 && TrueCount<1)
		{if (MathAbs(Close[Counter+3]-Close[Counter])>=Range*4.6) TrueCount=TrueCount+1;
		Counter=Counter+1;
		}
	if (TrueCount>=1) {MRO2=Counter;} else {MRO2=-1;}
	if (MRO1>-1) {value11=3;} else {value11=value10;}
	if (MRO2>-1) {value11=4;} else {value11=value10;}
	value2=100-MathAbs(iWPR(NULL,0,value11,shift)); // PercentR(value11=9)

	Table_value2[shift]=value2;

	value3=0;

	if (value2<x2)
		{i1=1;
		while (Table_value2[shift+i1]>=x2 && Table_value2[shift+i1]<=x1){i1++;}
		if (Table_value2[shift+i1]>x1) 
			{
			value3=High[shift]+Range*0.5;
			val1=value3;

			val2=0;
			} 
		}
	if (value2>x1)
		{i1=1;
		while (Table_value2[shift+i1]>=x2 && Table_value2[shift+i1]<=x1){i1++;}
		if (Table_value2[shift+i1]<x2) 
			{
			value3=Low[shift]-Range*0.5;
			val2=value3;

			val1=0;
			}
		}

ascsigsell[shift]=val1;
ascsigbuy[shift]=val2;	

}

if (ascsigsell[1]>0 && ascsigsell[0]>0)
  {
   SigValSell=Period();
   timecntbuy=0;
   SigValBuy=

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

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

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

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

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

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

Стоимость полного кода
785,90₽ ≈ $9.61