SilverTrendTrading v3
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «silvertrendtrader_v3.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
SilverTrendTrading v3 — советник для платформы MetaTrader 4, предназначенный для анализа ценовых данных и автоматического открытия торговых позиций. Программа формирует сигналы на основе внутреннего индикатора тренда и скользящей средней, после чего направляет ордера на покупку или продажу через торговое API MetaTrader.
Советник поддерживает трейлинг-стоп, фиксированный тейк-профит и начальный стоп-лосс для управляемых сделок. Одновременно может быть открыта только одна позиция на символ и таймфрейм — при наличии активного ордера с тем же magic number новые сделки блокируются.
Встроена защита от открытия сделок в пятничный вечер после заданного часа. Также реализована блокировка параллельных торговых операций с помощью глобальной переменной, предотвращающая конфликты при одновременных запусках. Магический номер для каждой комбинации символ/таймфрейм вычисляется автоматически.
Настройки программы
| Настройка | Описание |
|---|---|
| MAPeriod | MAPeriod — Период скользящей средней (EMA), используемой для подтверждения направления тренда. По умолчанию 60. |
| TrailingStop | TrailingStop — Расстояние в пунктах для трейлинг-стопа активных позиций. Значение 0 отключает трейлинг-стоп. По умолчанию 0. |
| TakeProfit | TakeProfit — Тейк-профит в пунктах для новых сделок. Значение 0 отключает тейк-профит. По умолчанию 0. |
| InitialStopLoss | InitialStopLoss — Начальный стоп-лосс в пунктах для новых сделок. Значение 0 отключает стоп-лосс. По умолчанию 0. |
| ADXLimit | ADXLimit — Числовой параметр, объявленный в исходном коде; в основной торговой логике не используется. По умолчанию 25. |
| FridayNightHour | FridayNightHour — Час (по серверному времени), после которого в пятницу новые сделки не открываются. По умолчанию 16. |
Поиск по коду файла
#include <stdlib.mqh>
#property stacksize 1024
extern int MAPeriod=60;
extern double TrailingStop = 0;
extern double TakeProfit = 0;
extern double InitialStopLoss=0;
extern double ADXLimit=25;
extern double FridayNightHour=16;
double Lots = 1;
int risk=3;
datetime bartime = 0;
double Slippage=3;
int start()
{
// код доступен только после оплаты
}
int cnt, ticket, err, result, total;
int has_a_short_trade=0, has_a_long_trade=0;
int MagicNumber;
double ts, tp, Min_OrderPrice;
double MA, MAPrevious;
double ADX;
bool LongSignal, ShortSignal, ExitLong, ExitShort;
int Signal, OldSignal;
string setup;
static double lastslope= 0.0;
static int didbreakalert= false;
if(IsTesting() && Bars<100) return(0);
MagicNumber = 40000 + func_Symbol2Val(Symbol())*100 + func_TimeFrame_Const2Val(Period());
setup="STv3_" + Symbol() + "_" + func_TimeFrame_Val2String(func_TimeFrame_Const2Val(Period()));
if (bartime == Time[0]) {
return(0);
} else {
bartime = Time[0];
}
Signal=SilverTrendSignal();
if (MAPeriod>0) {
MA=iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_MEDIAN, 0);
MAPrevious=iMA(NULL, 0, MAPeriod, 0, MODE_EMA, PRICE_MEDIAN, 1);
if (OldSignal!=Signal && Signal>0 && MA>MAPrevious) {
LongSignal=true;
ShortSignal=false;
} else if (OldSignal!=Signal && Signal<0 && MA<MAPrevious){
LongSignal=false;
ShortSignal=true;
} else {
LongSignal=false;
ShortSignal=false;
}
} else {
if (OldSignal!=Signal && Signal>0) {
LongSignal=true;
ShortSignal=false;
} else if (OldSignal!=Signal && Signal<0){
LongSignal=false;
ShortSignal=true;
} else {
LongSignal=false;
ShortSignal=false;
}
}
if (Signal>0) {
ExitLong=false;
ExitShort=true;
} else if (Signal<0) {
ExitLong=true;
ExitShort=false;
} else {
ExitLong=false;
ExitShort=false;
}
total = OrdersTotal();
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber) {
if(ExitLong) {
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
if (err>1) {
Print("Error closing BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
} else if(TrailingStop>0) {
if(Bid-OrderOpenPrice()>Point*TrailingStop) {
ts = Bid-Point*TrailingStop;
}
if((OrderStopLoss()<ts) || (OrderStopLoss()==0)) {
result=OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
err = GetLastError();
if (err>1) {
Print("Error modifying BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
}
}
} else if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber) {
if (ExitShort) {
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
if (err>1) {
Print("Error closing SELL order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
} else if(TrailingStop>0) {
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
ts=Ask+Point*TrailingStop;
}
if((ts!=0) && ((OrderStopLoss()>ts) || (OrderStopLoss()==0))) {
result=OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
err = GetLastError();
if (err>1) {
Print("Error modifying Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
}
}
}
}
if(AccountFreeMargin()<(1000*Lots)) return(0);
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber()==MagicNumber) return(0); // atm only one trade at a time
}
if(LongSignal) {
if (FridayNightHour>0 &&TimeDayOfWeek(Time[0])==5 && TimeHour(Time[0])>FridayNightHour) {
if (!IsTesting()) Print("Friday: No New Trades: " + TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
return(0);
}
if(InitialStopLoss>0) { ts = Ask-(InitialStopLoss*Point);
} else { ts = 0; }
if(TakeProfit>0) { tp = Ask+(TakeProfit*Point);
} else { tp = 0;}
ticket=OrderSendExtended(Symbol(),OP_BUY,Lots,Ask,Slippage,ts,tp,setup,MagicNumber,0,Green);
if (!IsTesting()) PlaySound("expert.wav");
if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { OrderPrint(); }
} else {
err = GetLastError()Показано первые 50% кода (символов: 6908)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.