Forexgain SDL
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «trendsignalea-ita.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Forexgain SDL — торговый советник для MetaTrader 4, который определяет направление тренда через внешний индикатор TrendSignal и открывает BUY или SELL ордера в зависимости от полученного сигнала. Режим reverse позволяет торговать против сигнала индикатора. Советник поддерживает фиксированные стоп-лосс и тейк-профит, поэтапное закрытие части позиции по нескольким уровням прибыли, а также трейлинг-стоп в пипах.
Встроена фильтрация по спреду и защита от дублирования ордеров. Реализовано автоматическое закрытие всех открытых и отложенных ордеров при достижении целевых сумм по прибыли за день, по балансу счёта или при падении эквити ниже заданного порога. Также доступен денежный трейлинг-стоп на уровне эквити.
Советник ведёт журнал данных счёта в HTML-файл (баланс, эквити, свободный маржин, прибыль по ордерам), отображает текущий спред и состояние эквити на графике, рисует трендовые стрелки на графике за заданное количество баров назад. Для работы требуется наличие индикатора TrendSignal в папке EXPERTS/INDICATORS.
Настройки программы
| Настройка | Описание |
|---|---|
| help_lots | help_lots — Подсказка: количество лотов базового ордера |
| lots | Лот — Базовый размер лота для ордеров |
| help_spreadLimit | help_spreadLimit — Подсказка: лимит спреда в пипах для предотвращения открытия при высоком спреде |
| help_fixStopLoss | help_fixStopLoss — Подсказка: фиксированный стоп-лосс в пипах (0 — нет) |
| fixStopLoss | Фиксированный стоп-лосс — Фиксированный стоп-лосс в пипах (0 — без стоп-лосса) |
| help_fixTakeProfit | help_fixTakeProfit — Подсказка: фиксированный тейк-профит в пипах (0 — нет) |
| fixTakeProfit | Фиксированный тейк-профит — Фиксированный тейк-профит в пипах (0 — без тейк-профита) |
| help_partialTake_1 | help_partialTake_1 — Подсказка: уровни частичного тейк-профита в пипах и лоты для закрытия |
| help_partialTake_2 | help_partialTake_2 — Подсказка: false — не применять частичные тейк-профиты |
| partialTake | Частичный тейк-профит — Переключатель: включить/выключить частичные тейк-профиты |
| partialTake1 | Частичный тейк 1 — Первый уровень частичного тейк-профита в пипах |
| partialLots1 | Частичный лот 1 — Количество лотов для частичного закрытия при первом уровне тейк-профита |
| partialTake2 | Частичный тейк 2 — Второй уровень частичного тейк-профита в пипах |
| partialLots2 | Частичный лот 2 — Количество лотов для частичного закрытия при втором уровне тейк-профита |
| partialTake3 | Частичный тейк 3 — Третий уровень частичного тейк-профита в пипах |
| partialLots3 | Частичный лот 3 — Количество лотов для частичного закрытия при третьем уровне тейк-профита |
| partialTake4 | Частичный тейк 4 — Четвёртый уровень частичного тейк-профита в пипах |
| partialLots4 | Частичный лот 4 — Количество лотов для частичного закрытия при четвёртом уровне тейк-профита |
| partialTake5 | Частичный тейк 5 — Пятый уровень частичного тейк-профита в пипах |
| partialLots5 | Частичный лот 5 — Количество лотов для частичного закрытия при пятом уровне тейк-профита |
| help_startPips | help_startPips — Подсказка: после скольких пипов прибыли срабатывает трейлинг-стоп (0 — сразу) |
| startPips | Старт трейлинга в пипах — Количество пипов прибыли, после которых активируется трейлинг-стоп (0 — сразу) |
| help_trailPips | help_trailPips — Подсказка: трейлинг-стоп в пипах (0 — без трейлинга) |
| trailPips | Трейлинг-стоп в пипах — Трейлинг-стоп в пипах (0 — без трейлинга) |
| help_signal | help_signal — Подсказка: разделитель |
| help_reverse | help_reverse — Подсказка: true для открытия ордеров в противоположном направлении от тренда |
| reverse | Реверс — Переключатель: торговать в противоположном направлении от сигнала индикатора |
| help_closeOther | help_closeOther — Подсказка: закрывать другие ордера при открытии нового |
| closeOther | closeOther — Переключатель: при открытии нового ордера закрывать все остальные ордера на символе |
| help_timeframe | help_timeframe — Подсказка: таймфрейм для работы (0 — текущий график) |
| timeframe | Таймфрейм — Таймфрейм для работы советника (0 — текущий график) |
| help_signalName | help_signalName — Подсказка: имя индикатора в папке EXPERTS/INDICATORS |
| signalName | Имя индикатора сигнала — Имя индикатора TrendSignal в папке EXPERTS/INDICATORS |
| RISK | RISK — Параметр риска, передаваемый в индикатор TrendSignal |
| CountBars | CountBars — Количество баров для расчёта трендовых сигналов |
| help_backDays_1 | help_backDays_1 — Подсказка: сколько дней рисовать назад |
| help_backDays_2 | help_backDays_2 — Подсказка: только для контроля, не влияет на ордера |
| backDays | backDays — Количество дней для визуализации трендовых сигналов на графике (только для отображения, не влияет на ордера) |
| colorUpTrend | Цвет восходящего тренда — Цвет стрелки восходящего тренда на графике |
| colorDnTrend | Цвет нисходящего тренда — Цвет стрелки нисходящего тренда на графике |
| help_money | help_money — Подсказка: разделитель настроек управления деньгами |
| help_ordersTP_1 | help_ordersTP_1 — Подсказка: денежный тейк-профит по открытым ордерам (0 — отключено) |
| help_ordersTP_2 | help_ordersTP_2 — Подсказка: при достижении закрыть все ордера и начать заново |
| ordersTP | Тейк-профит ордеров в деньгах — Денежный тейк-профит по открытым ордерам (0 — отключено). При достижении все ордера закрываются |
| help_dailyProfit | help_dailyProfit — Подсказка: целевая прибыль за день в деньгах |
| dailyProfit | Целевая дневная прибыль — Целевая прибыль в день в денежном выражении (0 — отключено). При достижении все ордера закрываются |
| help_targetMoney_1 | help_targetMoney_1 — Подсказка: целевая сумма на счёте (0 — отключено) |
| help_targetMoney_2 | help_targetMoney_2 — Подсказка: при достижении эквити цели — закрыть все ордера |
| targetMoney | Целевая сумма на счёте — Целевая сумма на счёте (0 — отключено). При достижении эквити цели все ордера закрываются |
| help_saveMoney_1 | help_saveMoney_1 — Подсказка: минимальная сумма для сохранения на счёте (0 — отключено) |
| help_saveMoney_2 | help_saveMoney_2 — Подсказка: при падении эквити ниже — закрыть все ордера |
| saveMoney | Минимальное сохранение на счёте — Минимальная сумма для сохранения на счёте (0 — отключено). При падении эквити ниже — закрытие всех ордеров |
| help_moneyTrail | help_moneyTrail — Подсказка: денежный трейлинг-стоп на эквити (0 — отключено) |
| moneyTrail | Денежный трейлинг-стоп — Денежный трейлинг-стоп на уровне эквити (0 — отключено) |
| help_closePending | help_closePending — Подсказка: удалять также отложенные ордера при закрытии |
| closePending | closePending — Переключатель: при закрытии ордеров также удалять отложенные ордера |
Поиск по коду файла
#property show_inputs
extern string help_lots = "numero di lotti ordine base";
extern double lots = 0.50;
extern string help_spreadLimit = "limite pip di spread per evitare ordini se troppo alto";
double spreadLimit = 5.00;
extern string help_fixStopLoss = "pip stop loss FISSO in macchina (0 = nessuno)";
extern double fixStopLoss = 0.00;
extern string help_fixTakeProfit = "pip take profit FISSO in macchina (0 = nessuno)";
extern double fixTakeProfit = 0.00;
extern string help_partialTake_1 = "pip take profit partial and how many lots to close";
extern string help_partialTake_2 = "false = NON applica take parziali";
extern bool partialTake = true;
extern double partialTake1 = 7.00;
extern double partialLots1 = 0.10;
extern double partialTake2 = 15.00;
extern double partialLots2 = 0.10;
extern double partialTake3 = 20.00;
extern double partialLots3 = 0.10;
extern double partialTake4 = 25.00;
extern double partialLots4 = 0.10;
extern double partialTake5 = 00.00;
extern double partialLots5 = 0.00;
extern string help_startPips = "dopo quanti pip di guadagno scatta trailing stop (0 = subito)";
extern double startPips = 10.0;
extern string help_trailPips = "trailing stop in pip (0 = no trailing stop)";
extern double trailPips = 20.0;
extern string help_signal = "--------------------------------------------------";
extern string help_reverse = "true per aprire gli ordini CONTRARI al TrendSignal";
extern bool reverse = false;
extern string help_closeOther = "true to close other order when new one opens";
extern bool closeOther = true;
extern string help_timeframe = "timeframe to use, fix it or 0 = open chart";
extern int timeframe = 0;
extern string help_signalName = "nome indicatore nella cartella EXPERTS\INDICATORS";
extern string signalName = "Trendsignal (1)";
extern int RISK = 3;
extern int CountBars = 300;
extern string help_backDays_1 = "quanti giorni disegnare indietro";
extern string help_backDays_2 = "solo per controllare, NON influenza ordini";
extern int backDays = 20;
extern color colorUpTrend = Lime;
extern color colorDnTrend = Red;
extern string help_money = "--------------------------------------------------";
extern string help_ordersTP_1 = "take profit IN SOLDI PER GLI ORDINI APERTI (0 = disattivato)";
extern string help_ordersTP_2 = "quando viene raggiunto CHIUDE TUTTI ORDINI e riparte";
extern double ordersTP = 0.00;
extern string help_dailyProfit = "obiettivo IN SOLDI PER LA GIORNATA (0 = disattivato)";
extern double dailyProfit = 0.00;
extern string help_targetMoney_1 = "obiettivo IN SOLDI SUL CONTO (0 = disattivato)";
extern string help_targetMoney_2 = "se EQUITY raggiunge obiettivo chiude TUTTI GLI ORDINI";
extern double targetMoney = 0.00;
extern string help_saveMoney_1 = "soldi MINIMI da SALVARE SUL CONTO (0 = disattivato)";
extern string help_saveMoney_2 = "se EQUITY va sotto chiude TUTTI GLI ORDINI";
extern double saveMoney = 0.00;
extern string help_moneyTrail = "trailing stop IN SOLDI SUL CONTO (0 = disattivato)";
extern double moneyTrail = 0.00;
extern string help_closePending = "true = oltre ORDINI APERTI cancella ANCHE PENDENTI";
extern bool closePending = true;
datetime firstStart = 0;
datetime lastOrder = 0;
double pip, iBid, iAsk, spread;
int magic = 100; string comment = "";
double openPrice = 0.0; double minPips = 0.0;
double stopLoss = 0.0; double lossPrice = 0.0;
double takeProfit = 0.0; double profitPrice = 0.0;
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int start()
{
// код доступен только после оплаты
}
int trendSignal(int shift = 0)
{
double tSigUp = iCustom(NULL, 0, signalName, RISK, CountBars, 1, shift);
double tSigDn = iCustom(NULL, 0, signalName, RISK, CountBars, 0, shift);
if (tSigUp != 0)
{
string tSigUpName = "TrendSignal Up " + TimeToStr(iTime(NULL, 0, shift));
if (ObjectFind( tSigUpName) < 0)
{
ObjectCreate(tSigUpName, OBJ_ARROW, 0, 0, 0);
ObjectSet( tSigUpName, OBJPROP_BACK, false);
}
ObjectSet( tSigUpName, OBJPROP_ARROWCODE, 233);
ObjectSet( tSigUpName, OBJPROP_COLOR, DeepSkyBlue);
ObjectMove( tSigUpName, 0, iTime(NULL, Period(), shift), tSigUp);
return(+1);
}
if (tSigDn != 0)
{
string tSigDnName = "TrendSignal Dn " + TimeToStr(iTime(NULL, 0, shift));
if (ObjectFind( tSigDnName) < 0)
{
ObjectCreate(tSigDnName, OBJ_ARROW, 0, 0, 0);
ObjectSet( tSigDnName, OBJPROP_BACK, false);
}
ObjectSet( tSigDnName, OBJPROP_ARROWCODE, 234);
ObjectSet( tSigDnName, OBJPROP_COLOR, DeepPink);
ObjectMove( tSigDnName, 0, iTime(NULL, Period(), shift), tSigDn + 5*pip);
return (-1);
}
return(0);
}
int print(string text, bool flashing = false)
{
if (ObjectFind( "Check text") < 0)
{
ObjectCreate("Check text", OBJ_LABEL, 0, 0, 0);
ObjectSet( "Check text", OBJPROP_COLOR, White);
ObjectSet( "Check text", OBJPROP_BACK, false);
ObjectSet( "Check text", OBJPROP_CORNER, 0);
ObjectSet( "Check text", OBJPROP_XDISTANCE, 300);
ObjectSet( "Check text", OBJPROP_YDISTANCE, 50);
}
ObjectSetText( "Check text", TimeToStr(iTime(NULL, PERIOD_M1, 0), TIME_MINUTES) + " " + text, 12, "Tahoma");
if (flashing && ObjectGet("Check text", OBJPROP_COLOR) == White) ObjectSet("Check text", OBJPROP_COLOR, Red);
else if (flashing && ObjectGet("Check text", OBJPROP_COLOR) == Red) ObjectSet("Check text", OBJPROP_COLOR, White);
else ObjectSet("Check text", OBJPROP_COLOR, White);
return(0);
}
int checkPoint(string symbol)
{
RefreshRates();
double iPoint = MarketInfo(symbol, MODE_POINT);
if (iPoint == 0.01) pip = 0.01;
else if (iPoint == 0.001) pip = 0.01;
else if (iPoint == 0.0001) pip = 0.0001;
else if (iPoint == 0.00001) pip = 0.0001;
iBid = MarketInfo(symbol, MODE_BID);
iAsk = MarketInfo(symbol, MODE_ASK);
spread = NormalizeDouble((iAsk - iBid)/pip, Digits);
double iDigits = MarketInfo(symbol, MODE_DIGITS);
if ( iDigits == 3 || iDigits == 5) minPips = MarketInfo(symbol, MODE_STOPLEVEL)/10;
else minPips = MarketInfo(symbol, MODE_STOPLEVEL);
if (symbol == Symbol())
{
if (ObjectFind( "Spread") < 0)
{
ObjectCreate("Spread", OBJ_LABEL, 0, 0, 0);
ObjectSet( "Spread", OBJPROP_BACK, false);
ObjectSet( "Spread", OBJPROP_CORNER, 3);
ObjectSet( "Spread", OBJPROP_XDISTANCE, 10);
ObjectSet( "Spread", OBJPROP_YDISTANCE, 10);
}
ObjectSetText( "Spread", Symbol() + " spread " + DoubleToStr(spread, 1) + " pips", 12, "Tahoma", Red);
}
return(0);
}
double moneyStop = 0.0;
double yesterTot = 0.0; int yesterOrd = 0;
double yesterTake = 0.0; int yesterOrdTake = 0;
double yesterLoss = 0.0; int yesterOrdLoss = 0;
datetime lastMoneyUpdate = 0;
int moneyManagement()
{
checkPoint(Symbol());
if (moneyTrail == 0) moneyStop = 0;
else moneyStop = MathMax(moneyStop, AccountEquity() - moneyTrail);
double printStop = MathMax(moneyStop, saveMoney);
if (iTime(NULL, PERIOD_M1, 0) != lastMoneyUpdate)
{
lastMoneyUpdate = iTime(NULL, PERIOD_M1, 0);
int handle;
handle = FileOpen("ForexGump " + AccountNumber() + ".htm", FILE_BIN|FILE_WRITE);
if(handle < 1)
{
Alert(Symbol(), " Error updating account data log file");
}
else
{
FileWrite(handle, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"">");
FileWrite(handle, "<html xmlns=\""><head>ForexGump<title></title></head><body>");
FileWrite(handle, TimeToStr(iTime(NULL, PERIOD_M1, 0), TIME_DATE|TIME_SECONDS), "<br/>");
FileWrite(handle, "Account ", AccountNumber(), "<br/>");
FileWrite(handle, AccountName(), "<br/><br/>");
FileWrite(handle, "Balance ", AccountBalance(), " ?<br/>");
FileWrite(handle, "Equity ", AccountEquity(), " ?<br/>");
FileWrite(handle, "Free margin ", DoubleToStr(AccountFreeMargin(), 2), " ?<br/>");
FileWrite(handle, "Money stop at ", printStop, " ?<br/>");
int pos; double orderTot = 0.0;
FileWrite(handle, "<br/>Running orders<br/>");
for (pos = 0; pos < OrdersTotal(); pos++)
{
OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
FileWrite(handle, OrderSymbol(), " ", OrderLots(), " ", OrderComment(), " ", OrderProfit(), " ?<br/>");
orderTot += OrderProfit();
}
}
FileWrite(handle, "<br/>Running tot ", orderTot, " ?<br/>");
FileWrite(handle, "<br/>Waiting orders<br/>");
for (pos = 0; pos < OrdersTotal(); pos++)
{
OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
{
FileWrite(handle, TimeToStr(OrderOpenTime(), TIME_DATE|TIME_MINUTES), " ", OrderSymbol(), " ",
OrderLots(), " ", OrderComment(), "<br/>");
}
}
orderTot = 0.0; int orderOrd = 0;
int orderOrdTake = 0; int orderOrdLoss = 0;
double orderTake = 0.0; double orderLoss = 0.0;
FileWrite(handle, "<br/>Today closed<br/>");
for (pos = 0; pos < OrdersHistoryTotal(); pos++)
{
OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY);
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) &&
TimeDayOfWeek(OrderCloseTime()) == TimeDayOfWeek(iTime(NULL, PERIOD_M5, 0)))
{
FileWrite(handle, OrderSymbol(), " ", OrderLots(), " ", OrderComment(), " ", OrderProfit(), " ?<br/>");
orderTot += OrderProfit(); orderOrd += 1;
if (OrderProfit() > 0) {orderTake += OrderProfit(); orderOrdTake += 1;}
if (OrderProfit() < 0) {orderLoss -= OrderProfit(); orderOrdLoss += 1;}
}
}
FileWrite(handle, "<br/>Today tot ", orderOrdTake, " x ", orderTake, " ? - ",
orderOrdLoss, " x ", orderLoss, " ? = ", orderOrd, " x ", orderTot, " ?<br/>");
if (yesterTot == 0 || TimeDayOfWeek(iTime(NULL, PERIOD_M5, 0)) != TimeDayOfWeek(iTime(NULL, PERIOD_M5, 1)))
{
yesterTot = 0; yesterOrd = 0;
yesterTake = 0; yesterOrdTake = 0;
yesterLoss = 0; yesterOrdLoss = 0;
for (pos = 0; pos < OrdersHistoryTotal(); pos++)
{
OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY);
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) &&
TimeDayOfWeek(OrderCloseTime()) == TimeDayOfWeek(iTime(NULL, PERIOD_M5, 0) - 24*60*60))
{
yesterTot += OrderProfit(); yesterOrd +=1;
if (OrderProfit() > 0) {yesterTake += OrderProfit(); yesterOrdTake += 1;}
if (OrderProfit() < 0) {yesterLoss -= OrderProfit(); yesterOrdLoss += 1;}
}
}
}
FileWrite(handle, "Yestd tot ", yesterOrdTake, " x ", yesterTake, " ? - ",
yesterOrdLoss, " x ", yesterLoss, " ? = ", yesterOrd, " x ", yesterTot, " ?<br/>");
FileWrite(handle, "</body></html>");
FileClose(handle);
}
}
if (ObjectFinПоказано первые 50% кода (символов: 25546)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.