Shafina
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «shafina v1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Shafina v1 — торговый советник для MetaTrader 4, использующий технические индикаторы (скользящую среднюю или канал Envelope) для генерации отложенных ордеров BUY STOP и SELL STOP. Советник автоматически определяет направление сделки на основе пересечения ценовых уровней индикатора и размещает соответствующие ордера при соблюдении условий по спреду и времени.
Программа включает встроенное управление рисками: функцию трейлинг-стоп, фиксацию безубыточного уровня, фильтр спреда и временной фильтр торговых сессий. Доступна автоматическая корректировка параметров ордеров в зависимости от текущей прибыльности позиции.
Советник поддерживает различные настройки фильтров для трёх валютных пар (EURUSD, GBPUSD, USDJPY) и предлагает два варианта управления лотами: расчёт на основе риска или использование фиксированного размера. Встроенная функция закрытия по времени позволяет автоматически закрывать позиции через заданный промежуток при достижении минимальной прибыли.
Настройки программы
| Настройка | Описание |
|---|---|
| Filter | Фильтр волатильности для текущей валютной пары (автоматически подстраивается под EURUSD, GBPUSD или USDJPY) |
| org 140 (Filter_EU) | Фильтр волатильности для пары EURUSD |
| Filter_GU | Фильтр волатильности для пары GBPUSD |
| Filter_UJ | Фильтр волатильности для пары USDJPY |
| MagicNumber | Уникальный номер магического ордера для идентификации сделок советника |
| TradeComment | Комментарий для торговых ордеров советника |
| MaxTrades | Максимальное количество одновременно открытых сделок советником |
| this is for our BUY/SELL STOP SL 2.3 pips modify, can not put 200 pips, will lose !!! (StopLoss) | Стоп-лосс для отложенных ордеров BUY STOP и SELL STOP |
| 30 pips (NoTrade_Profit_Yet_StopLoss) | Уровень стоп-лосса для модификации ордера при отсутствии нереализованной прибыли |
| 2.3 pips (InTrade_Profit_StopLoss) | Уровень стоп-лосса для модификации ордера при наличии нереализованной прибыли |
| not used !!! (Distance) | Не используется (устаревший параметр) |
| NoTrade_Profit_Yet_Distance | Расстояние для модификации ордера при отсутствии нереализованной прибыли |
| InTrade_Profit_Distance | Расстояние для модификации ордера при наличии нереализованной прибыли |
| 20 will cause order130 error (Limit) | Уровень лимита для размещения отложенных ордеров |
| can not play with this , 20 should be ok!!! (NoTrade_Profit_Yet_Limit) | Уровень лимита для модификации ордера при отсутствии нереализованной прибыли |
| InTrade_Profit_Limit | Уровень лимита для модификации ордера при наличии нереализованной прибыли |
| Use_TrailingStep | Включение/отключение функции трейлинг-стопа |
| org 2.9 meaning keep bid/ask distance by x PIPS (Start_Trailing_At) | Уровень прибыли в пунктах для активации трейлинг-стопа |
| org 0.3 (TrailingStep) | Шаг трейлинг-стопа в пунктах |
| Use_Set_BreakEven | Включение/отключение функции фиксации безубыточного уровня |
| org 0.3 (LockPips) | Количество пунктов для фиксации безубыточного уровня |
| org 2.3 (Set_BreakEvenAt) | Уровень прибыли в пунктах для фиксации безубыточного уровня |
| MinLots | Минимально допустимый размер лота |
| 100000.0; (MaxLots) | Максимально допустимый размер лота |
| org 60 (Risk) | Процент риска для расчёта размера лота при включённом менеджменте риска |
| 0.1; (FixedLots) | Фиксированный размер лота при отключённом менеджменте риска |
| UseMM | Включение/отключение автоматического менеджмента размера лота (расчёт по риску) |
| 6.3 ok ! (MaxSpreadPlusCommission) | Максимально допустимый спред с комиссией для текущей пары |
| 0.6 ok ! (MaxSpreadPlusCommission_EU) | Максимально допустимый спред с комиссией для пары EURUSD |
| 1.0 ok ! (MaxSpreadPlusCommission_GU) | Максимально допустимый спред с комиссией для пары GBPUSD |
| 0.6 ok ! (MaxSpreadPlusCommission_UJ) | Максимально допустимый спред с комиссией для пары USDJPY |
| 6.3 ok ! (MaxSpread) | Максимально допустимый спред для текущей пары (автоматически подстраивается под EURUSD, GBPUSD или USDJPY) |
| 0.6 ok ! (MaxSpread_EU) | Максимально допустимый спред для пары EURUSD |
| 1.0 ok ! (MaxSpread_GU) | Максимально допустимый спред для пары GBPUSD |
| 0.6 ok ! (MaxSpread_UJ) | Максимально допустимый спред для пары USDJPY |
| MAPeriod | Период расчёта для индикатора Moving Average |
| MAMethod | Метод сглаживания для Moving Average (0 — простое, 1 — экспоненциальное и др.) |
| TimeFilter | Заголовок раздела временного фильтра |
| StartHour | Час начала временного фильтра торгов (24-часовой формат) |
| StartMinute | Минута начала временного фильтра торгов |
| EndHour | Час окончания временного фильтра торгов (24-часовой формат) |
| EndMinute | Минута окончания временного фильтра торгов |
| IndicatorSetting | Заголовок раздела настроек индикатора |
| 0 = Moving Average ( iMA ), 1 = Envelope (iEnvelope) (IndicatorToUse) | Выбранный индикатор: 0 — Moving Average (iMA), 1 — Envelope (iEnvelope) |
| Env_period | Период расчёта для индикатора Envelope |
| 0.05 (Env_deviation) | Отклонение для индикатора Envelope |
| Env_shift | Сдвиг для индикатора Envelope |
Поиск по коду файла
#import "stdlib.ex4"
string ErrorDescription(int a0);
#import
extern int Filter = 140;
extern int Filter_EU = 130; //org 140
extern int Filter_GU = 170;
extern int Filter_UJ = 190;
extern int MagicNumber = 150115;
extern string TradeComment = "Shafina";
extern int MaxTrades = 10;
extern double StopLoss = 5; //this is for our BUY/SELL STOP SL 2.3 pips modify, can not put 200 pips, will lose !!!
extern double NoTrade_Profit_Yet_StopLoss = 30; //30 pips
extern double InTrade_Profit_StopLoss = 60; //2.3 pips
extern double Distance = 30; // not used !!!
extern double NoTrade_Profit_Yet_Distance = 20;
extern double InTrade_Profit_Distance = 30;
extern double Limit = 23.0; // 20 will cause order130 error
extern double NoTrade_Profit_Yet_Limit = 22; // can not play with this , 20 should be ok!!!
extern double InTrade_Profit_Limit = 25;
extern bool Use_TrailingStep = TRUE;
extern double Start_Trailing_At = 2.9; // org 2.9 meaning keep bid/ask distance by x PIPS
extern double TrailingStep = 0.3; // org 0.3
extern bool Use_Set_BreakEven = TRUE;
extern double LockPips = 0.3; // org 0.3
extern double Set_BreakEvenAt = 2.3; // org 2.3
extern double MinLots = 0.01;
extern double MaxLots = 100000000.0;//100000.0;
extern double Risk = 10; // org 60
extern double FixedLots = 0.01;//0.1;
extern bool UseMM = TRUE;
extern double MaxSpreadPlusCommission = 6.3 ;//6.3 ok !
extern double MaxSpreadPlusCommission_EU = 10.3;//0.6 ok !
extern double MaxSpreadPlusCommission_GU = 10.0;//1.0 ok !
extern double MaxSpreadPlusCommission_UJ = 10.0;//0.6 ok !
extern double MaxSpread = 6.3 ;//6.3 ok !
extern double MaxSpread_EU = 0.6;//0.6 ok !
extern double MaxSpread_GU = 1.0;//1.0 ok !
extern double MaxSpread_UJ = 0.6;//0.6 ok !
extern int MAPeriod = 15;
extern int MAMethod = 1;
extern string TimeFilter = "---------- Time Filter ----------";
extern int StartHour = 0;
extern int StartMinute = 0;
extern int EndHour = 23;
extern int EndMinute = 59;
extern string IndicatorSetting = "=== Indicator Settings ===";
extern int IndicatorToUse = 1; // 0 = Moving Average ( iMA ), 1 = Envelope (iEnvelope)
extern int Env_period = 10;
extern double Env_deviation = 0.07; // 0.05
extern int Env_shift = 0;
int Env_low_band_price = PRICE_HIGH;
int Env_high_band_price = PRICE_LOW;
bool Timed_Closing = TRUE;
int Minutes_Buy = 40; //Minute
int Minutes_Sell = 40;
int Timed_Buy_TakeProfit = -5;
int Timed_Sell_TakeProfit = -5;
int Gi_180 = 0;
double G_pips_184 = 0.0;
int G_digits_192 = 0;
double G_point_196 = 0.0;
int Gi_204;
double Gd_208;
double Gd_216;
double Gd_224;
double Gd_232;
double Gd_240;
double Gd_248;
double Gd_256;
int G_slippage_264 = 3;
bool Gi_268;
double Gd_272;
double Gda_280[30];
int Gi_284 = 0;
string Gs_dummy_288;
string Gs_unused_316 = "";
string Gs_unused_324 = "";
double Gd_336;
double Gd_344;
int G_time_352;
int Gi_356;
int G_datetime_360;
int Gi_380;
int Gi_384;
int Gi_388;
int Gi_392 = 40;
double G_timeframe_396 = 240.0;
bool Gi_404 = TRUE;
color G_color_408 = DimGray;
double Gd_420;
color G_color_428 = Red;
color G_color_432 = DarkGray;
color G_color_436 = SpringGreen;
bool Gi_440 = TRUE;
double G_ihigh_444;
double G_ilow_452;
double Gd_460;
int G_datetime_468;
int D_Factor;
string EASymbol;
int init() {
// код доступен только после оплаты
}
int deinit() {
return (0);
}
int start() {
// код доступен только после оплаты
}
int error_8;
string Ls_12;
int ticket_20;
double price_24;
bool bool_32;
double Ld_36;
double Ld_44;
double price_60;
double Ld_112;
int Li_180;
int cmd_188;
double Ld_196;
double Ld_204;
double ihigh_68 = iHigh(NULL, 0, 0);
double ilow_76 = iLow(NULL, 0, 0);
double indicator_low;
double indicator_high;
double indicator_highlow_diff;
if ( IndicatorToUse == 1 )
{
indicator_low = iEnvelopes ( NULL, 0, Env_period, MODE_SMA, Env_shift, Env_low_band_price, Env_deviation, MODE_LOWER, 0 );
indicator_high = iEnvelopes ( NULL,0, Env_period, MODE_SMA, Env_shift, Env_high_band_price, Env_deviation, MODE_UPPER, 0 );
}
else
{
indicator_low = iMA ( NULL, 0, MAPeriod, Gi_180, MAMethod, PRICE_LOW, 0 );
indicator_high = iMA ( NULL, 0, MAPeriod, Gi_180, MAMethod, PRICE_HIGH, 0 );
}
indicator_highlow_diff = indicator_low - indicator_high;
if (!Gi_268) {
for (int pos_108 = OrdersHistoryTotal() - 1; pos_108 >= 0; pos_108--) {
if (OrderSelect(pos_108, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderProfit() != 0.0) {
if (OrderClosePrice() != OrderOpenPrice()) {
if (OrderSymbol() == Symbol()) {
Gi_268 = TRUE;
Ld_112 = MathAbs(OrderProfit() / (OrderClosePrice() - OrderOpenPrice()));
Gd_272 = (-OrderCommission()) / Ld_112;
break;
}
}
}
}
}
}
double Ld_120 = Ask - Bid;
ArrayCopy(Gda_280, Gda_280, 0, 1, 29);
Gda_280[29] = Ld_120;
if (Gi_284 < 30) Gi_284++;
double Ld_128 = 0;
pos_108 = 29;
for (int count_136 = 0; count_136 < Gi_284; count_136++) {
Ld_128 += Gda_280[pos_108];
pos_108--;
}
double Ld_140 = Ld_128 / Gi_284;
double Ld_148 = NormalizeDouble(Ask + Gd_272, G_digits_192); //Ask + comission
double Ld_156 = NormalizeDouble(Bid - Gd_272, G_digits_192); //Bid - comission
double Ld_164 = NormalizeDouble(Ld_140 + Gd_272, G_digits_192 + 1);
double Ld_172 = ihigh_68 - ilow_76;
if (Ld_172 > Gd_256) {
if (Ask < indicator_low/*ima_84*/) Li_180 = 1; // for BUY
else
if (Bid > indicator_high/*ima_92*/) Li_180 = -1; // for SELL
}
int count_184 = 0;
for (pos_108 = 0; pos_108 < OrdersTotal(); pos_108++) {
if (OrderSelect(pos_108, SELECT_BY_POS, MODE_TRADES)) {
if (OrderMagicNumber() == MagicNumber) {
cmd_188 = OrderType();
if (cmd_188 == OP_BUYLIMIT || cmd_188 == OP_SELLLIMIT) continue; //skip this !
double TotalProfit = 0.0;
if (OrderSymbol() == Symbol()) {
count_184++;
switch (cmd_188) {
case OP_BUY:
if (Distance < 0) break;
TotalProfit = (Bid - OrderOpenPrice())/Point/D_Factor;
if (TotalProfit <=1) {
Distance = NoTrade_Profit_Yet_Distance;
Limit = NoTrade_Profit_Yet_Limit;
StopLoss= NoTrade_Profit_Yet_StopLoss; }
Gd_248 = NormalizeDouble(Distance * G_point_196, G_digits_192);
Gd_240 = NormalizeDouble(Limit * G_point_196, G_digits_192);
Ld_44 = NormalizeDouble(OrderStopLoss(), G_digits_192);
price_60 = NormalizeDouble(Bid - Gd_248, G_digits_192); // Bid - Distance
Print("*****TotalProfit=",TotalProfit, ", Distance=", Distance, ", Bid - Distance", price_60, ", Stoploss=",Ld_44 );
if (!((Ld_44 == 0.0 || price_60 > Ld_44))) break; // Bid - Distance > Stoploss
bool_32 = OrderModify(OrderTicket(), OrderOpenPrice(), price_60, OrderTakeProfit(), 0, Blue);
if (!(!bool_32)) break;
error_8 = GetLastError();
Ls_12 = ErrorDescription(error_8);
Print("BUY Modify Error Code: " + error_8 + " Message: " + Ls_12 + " OP: " + DoubleToStr(price_24, G_digits_192) + " SL: " + DoubleToStr(price_60, G_digits_192) + " Bid: " + DoubleToStr(Bid, G_digits_192) + " Ask: " + DoubleToStr(Ask, G_digits_192));
break;
case OP_SELL:
if (Distance < 0) break;
TotalProfit = (OrderOpenPrice()- Ask)/Point/D_Factor;
if (TotalProfit <= 1) {
Distance = NoTrade_Profit_Yet_Distance;
Limit = NoTrade_Profit_Yet_Limit;
StopLoss= NoTrade_Profit_Yet_StopLoss; }
Gd_248 = NormalizeDouble(Distance * G_point_196, G_digits_192);
Gd_240 = NormalizeDouble(Limit * G_point_196, G_digits_192);
Ld_44 = NormalizeDouble(OrderStopLoss(), G_digits_192);
price_60 = NormalizeDouble(Ask + Gd_248, G_digits_192);
if (!((Ld_44 == 0.0 || price_60 < Ld_44))) break;
bool_32 = OrderModify(OrderTicket(), OrderOpenPrice(), price_60, OrderTakeProfit(), 0, Red);
if (!(!bool_32)) break;
error_8 = GetLastError();
Ls_12 = ErrorDescription(error_8);
Print("SELL ModifyПоказано первые 50% кода (символов: 14265)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.