SilverTrendTrading v6
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «silvertrendtrader_v6.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
SilverTrendTrading v6 — советник для MetaTrader 4, предназначенный для анализа ценовых данных и технических индикаторов с целью автоматического открытия и закрытия торговых позиций. Советник формирует сигналы на основе встроенного индикатора SilverTrend_Signal и позволяет выбирать тип фильтрации (EMA, JMA, JTPO, iTrend или LaGuerre) для подтверждения направления сделки.
Поддерживает открытие позиций BUY и SELL с заданием начального стоп-лосса, тейк-профита и трейлинг-стопа. Включает проверку свободной маржи перед входом в позицию и блокировку новых сделок в пятничный вечер после указанного часа.
Советник работает в рамках одного символа и таймфрейма, используя уникальный магический номер для идентификации управляемых ордеров. Обработка событий происходит на каждом тике, при этом повторный запуск на одном баре предотвращается проверкой времени.
Настройки программы
| Настройка | Описание |
|---|---|
| MAPeriod | Период скользящей средней — Период скользящей средней, используемой в расчётах индикаторов и в режиме фильтрации EMA. |
| TrailingStop | Трейлинг-стоп — Расстояние в пунктах для трейлинг-стопа. При значении больше нуля советник перемещает стоп-лосс вслед за ценой при достижении указанного профита. |
| TakeProfit | Тейк-профит — Расстояние в пунктах для тейк-профита при открытии позиции. Если значение равно нулю, тейк-профит не устанавливается. |
| InitialStopLoss | Начальный стоп-лосс — Расстояние в пунктах для начального стоп-лосса при открытии позиции. Если значение равно нулю, стоп-лосс не устанавливается. |
| 0 = nothing / 1=EMA / 2=JMA / 3=JTPO / 4 = iTrend / 5 - LaGuerre (Type) | Тип индикатора фильтрации сигналов — Тип индикатора для фильтрации торговых сигналов: 0 — без фильтрации, 1 — EMA, 2 — JMA, 3 — JTPO, 4 — iTrend, 5 — LaGuerre (RSI Лагера). |
| 1 - yes / 0 - no (SignalOfFullCandle) | Подтверждение сигнала по полной свече — Параметр подтверждения сигнала по полной свече. При значении 1 сигнал рассчитывается на закрытой свече (сдвиг 1), при значении 0 — на текущей свече (сдвиг 0). |
| FridayNightHour | Час запрета сделок в пятницу — Час в пятницу после которого запрещено открывать новые позиции. Если значение больше нуля и текущий час превышает это значение в пятницу, новые сделки не открываются. |
Поиск по коду файла
#include <stdlib.mqh>
#property stacksize 1024
extern int MAPeriod=120;
extern double TrailingStop = 0;
extern double TakeProfit = 0;
extern double InitialStopLoss=0;
extern int Type=5; // 0 = nothing / 1=EMA / 2=JMA / 3=JTPO / 4 = iTrend / 5 - LaGuerre
extern int SignalOfFullCandle=0; // 1 - yes / 0 - no
extern double FridayNightHour=16;
double Lots = 1;
int risk=3;
datetime bartime;
double Slippage=3;
int Signal, OldSignal;
int init() {
// код доступен только после оплаты
}
int start()
{
// код доступен только после оплаты
}
int func_TimeFrame_Const2Val(int Constant ) {
switch(Constant) {
case 1: // M1
return(1);
case 5: // M5
return(2);
case 15:
return(3);
case 30:
return(4);
case 60:
return(5);
case 240:
return(6);
case 1440:
return(7);
case 10080:
return(8);
case 43200:
return(9);
}
}
string func_TimeFrame_Val2String(int Value ) {
switch(Value) {
case 1: // M1
return("PERIOD_M1");
case 2: // M1
return("PERIOD_M5");
case 3:
return("PERIOD_M15");
case 4:
return("PERIOD_M30");
case 5:
return("PERIOD_H1");
case 6:
return("PERIOD_H4");
case 7:
return("PERIOD_D1");
case 8:
return("PERIOD_W1");
case 9:
return("PERIOD_MN1");
default:
return("undefined " + Value);
}
}
int func_Symbol2Val(string symbol) {
if(symbol=="AUDUSD") { return(01);
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD") { return(11);
} else if(symbol=="EURCHF") { return(12);
} else if(symbol=="EURGBP") { return(13);
} else if(symbol=="EURJPY") { return(14);
} else if(symbol=="EURUSD") { return(15);
} else if(symbol=="GBPCHF") { return(20);
} else if(symbol=="GBPJPY") { return(21);
} else if(symbol=="GBPUSD") { return(22);
} else if(symbol=="USDCAD") { return(40);
} else if(symbol=="USDCHF") { return(41);
} else if(symbol=="USDJPY") { return(42);
} else if(symbol=="GOLD") { return(90);
} else { Comment("unexpected Symbol"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
datetime OldCurTime;
int timeout=30;
int ticket;
OldCurTime=CurTime();
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
if(OldCurTime+timeout<=CurTime()) {
Print("Error in OrderSendExtended(): Timeout encountered");
return(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // set lock indicator
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // clear lock indicator
return(ticket);
}
double SilverTrendSignal(int shift)
{
int RISK=3;
int CountBars=350;
int SSP=9;
int i;
int i1,i2,K;
double Range,AvgRange,smin,smax,SsMax,SsMin,price,val=0;
bool uptrend,old;
K=33-RISK;
for (i = CountBars-SSP; i>=shift; i--) {
Range=0;
AvgRange=0;
for (i1=i; i1<=i+SSP; i1++) {AvgRange=AvgRange+MathAbs(High[i1]-Low[i1]); }
Range=AvgRange/(SSP+1);
SsMax=High[i];
SsMin=Low[i];
for (i2=i;i2<=i+SSP-1;i2++) {
price=High[i2];
if(SsMax<price) SsMax=price;
price=Low[i2];
if(SsMin>=price) SsMin=price;
}
smin = SsMin+(SsMax-SsMin)*K/100;
smax = SsMax-(SsMax-SsMin)*K/100;
val=0;
if (Close[i]<smin) {
uptrend = false;
}
if (Close[i]>smax) {
uptrend = true;
}
if (uptrend==true) { val=1;
} else if (uptrend==false) { val=-1;
} else { val=0; }
old=uptrend;
}
return(val);
}
double J_TPO(int Len, int shift)
{
double f0, f8, f10, f18, f20, f28, f30, f40, k,
var14, var18, var1C, var20, var24, value;
int f38, f48, var6, var12, varA, varE;
double arr0[300], arr1[300], arr2[300], arr3[300];
for(int i=200-Len-100; i>=shift; i--)
{
var14=0;
var1C=0;
if(f38==0)
{
f38=1;
f40=0;
if (Len-1>= 2) f30=Len-1;
else f30=2;
f48=f30+1;
f10=Close[i];
arr0[f38] = Close[i];
k=f48;
f18 = 12 / (k * (k - 1) * (k + 1));
f20 = (f48 + 1) * 0.5;
}
else
{
if (f38 <= f48) f38 = f38 + 1;
else f38 = f48 + 1;
f8 = f10;
f10 = Close[i];
if (f38 > f48)
{
for (var6 = 2; var6<=f48; var6++) arr0[var6-1] = arr0[var6];
arr0[f48] = Close[i];
}
else arr0[f38] = Close[i];
if ((f30 >= f38) && (f8 != f10)) f40 = 1;
if ((f30 == f38) && (f40 == 0)) f38 = 0;
}
if (f38 >= f48)
{
for (varA=1; varA<=f48; varA++)
{
arr2[varA] = varA;
arr3[varA] = varA;
arr1[varA] = arr0[varA];
}
for (varA=1; varA<=(f48-1); varA++)
{
var24 = arr1[varA];
var12 = varA;
var6 = varA + 1;
for (var6=varA+1; var6<=f48; var6++)
{
if (arr1[var6] < var24)
{
var24 = arr1[var6];
var12 = var6Показано первые 50% кода (символов: 16175)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.