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

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 и перейдите к оплате.

Стоимость полного кода
1 426,50₽ ≈ $17.43