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

Forex Gold Trader

forex-gold-trader-v.2.0.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Forex Gold Trader — это советник (Expert Advisor) для MetaTrader 4, предназначенный для торговли золотом и серебром. Работает исключительно на таймфрейме H1 и поддерживает рыночные ордера BUY и отложенные ордера BUYSTOP. В коде реализованы расчёт размера лота на основе баланса счёта, фильтр на основе EMA (10, 20, 30, 40, 50) и система управления рисками.

Советник предоставляет настраиваемые параметры: фиксированный и динамический размер лота, тейк-профит в пунктах, максимальный риск, лимит количества сделок. Поддерживается режим ECN-брокера с иной логикой выставления ордеров, а также правило FIFO для закрытия позиций при достижении целевой прибыли. Дополнительно имеется переключатель x1 для упрощённого FIFO-режима.

В продукте реализована система проверки лицензий (PC License и Server License), которая вызывается при инициализации и работе советника через внешние вызовы (ReadSN, ReadStatus, ReadHttp). Текущее состояние счёта, позиций и настроек отображается на графике через функцию Comment() при каждом обновлении.

Настройки программы

НастройкаОписание
Tittle Заголовок — Текстовый параметр, отображаемый как заголовок в интерфейсе советника.
reference Номер ссылки — Текстовый параметр-номер ссылки, используемый для идентификации и проверки лицензии.
UseFilter Использовать фильтр EMA — Переключатель фильтра EMA. При значении 1 используются скользящие средние EMA (10, 20, 30, 40, 50) для определения условий входа в сделку.
MaxTrades Максимальное количество сделок — Максимальное количество одновременных BUYSTOP-ордеров, разрешённых для открытия.
MaxRisk Максимальный риск — Максимальный допустимый убыток (в долларах). При превышении этого значения (и если значение отрицательное) все позиции на символе закрываются.
TakeProfit Тейк-профит — Целевой профит в пунктах для открытых позиций.
minLot Минимальный лот — Минимально допустимый размер лота.
maxLot Максимальный лот — Максимально допустимый размер лота.
staticLot Фиксированный лот — Фиксированный размер лота. Если не равен 0, используется вместо динамического расчёта.
dynamicLot Динамический лот — Динамический размер лота, используемый при расчёте размера позиции на основе баланса счёта.
ECNBroker ECN-брокер — Переключатель режима ECN-брокера. При включении советник не указывает тейк-профит при отправке ордера и добавляет его через OrderModify после исполнения.
FifoRule Правило FIFO — Переключатель правила FIFO. При активации позиции закрываются при достижении целевой прибыли, рассчитанной на основе размера лота.
Note Заметка — Текстовый параметр для пользовательских заметок.
x1 Дополнительное правило FIFO — Дополнительный переключатель FIFO-правила. При активации совместно с FifoRule позиции закрываются при достижении 10% от целевого профита.
x2 Переключатель x2 — Неиспользуемый переключатель (не задействован в логике советника).
Получить полный код

Поиск по коду файла

#include <stdlib.mqh>

extern string Tittle = "ForexGoldTrader.com";
extern string reference = "1";
extern int UseFilter = 0;
extern int MaxTrades = 25;
extern double MaxRisk = -99999.0;
extern int TakeProfit = 600;
extern double minLot = 0.01;
extern double maxLot = 10.0;
extern double staticLot = 0.0;
extern double dynamicLot = 1.0;
extern bool ECNBroker = FALSE;
extern bool FifoRule = FALSE;
extern string Note = "Ignore variables below";
extern bool x1 = FALSE;
extern bool x2 = FALSE;

int init() {
      // код доступен только после оплаты
   }

int start() {
      // код доступен только после оплаты
   }
   string ls_8;
   string ls_16;
   string ls_344;
   string ls_0 = StringSubstr(Symbol(), 0, 3);
   if (IsTesting()) ls_16 = "1";
   else ls_16 = "0";
   string ls_24 = "C:\\FGT20" + Symbol() + 60 + AccountNumber() + ls_16 + "1.txt";
   string ls_32 = "C:\\FGT20" + Symbol() + 60 + AccountNumber() + ls_16 + "2.txt";
   if (IsDemo()) ls_8 = "Demo Account";
   else ls_8 = "Live Account";
   if (reference == "0") {
      Comment("\n\nError!!Please fill your REFERENCE NUMBER!");
      return (0);
   }
   if (!IsConnected()) {
      Comment("\n\nError!!You must connected with internet! Please check your connection...");
      return (0);
   }
   if (!IsDllsAllowed()) {
      Comment("\n\nError!!You must enable \'Allow DLL Import\'!");
      return (0);
   }
   if (!IsExpertEnabled()) {
      Comment("\n\nError!!You must enable \'Enable Expert Advisor\'!");
      return (0);
   }
   if (Period() != PERIOD_H1) {
      Comment("\n\nError!!You must use 1H Period!");
      return (0);
   }
   if (ls_0 == "GBP" || ls_0 == "EUR" || ls_0 == "USD" || ls_0 == "JPY" || ls_0 == "CAD" || ls_0 == "AUD" || ls_0 == "NZD" || ls_0 == "CHF") {
      Comment("\n\nError!!FGT EA support for Gold or Silver only!");
      return (0);
   }
   int li_40 = 0;
   int l_digits_44 = MarketInfo(Symbol(), MODE_DIGITS);
   if (l_digits_44 == 3) li_40 = 10 * TakeProfit;
   else li_40 = TakeProfit;
   string l_dbl2str_48 = DoubleToStr(AccountNumber(), 0);
   string ls_56 = AccountName();
   string ls_64 = reference;
   string ls_72 = ReadSN(ls_32);
   string ls_80 = ReadStatus(ls_24, ls_32);
   double l_price_88 = NormalizeDouble(MarketInfo(Symbol(), MODE_ASK), Digits);
   double ld_96 = NormalizeDouble(MarketInfo(Symbol(), MODE_BID), Digits);
   double l_point_104 = MarketInfo(Symbol(), MODE_POINT);
   int li_112 = CountOrders(Symbol(), OP_BUY);
   int li_116 = CountOrders(Symbol(), OP_BUYSTOP);
   int li_120 = CountOrders(Symbol(), OP_SELL);
   string l_time2str_124 = TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS);
   string ls_132 = AccountCompany();
   string ls_140 = Symbol();
   string l_dbl2str_148 = DoubleToStr(AccountNumber(), 0);
   string ls_156 = AccountName();
   string l_dbl2str_164 = DoubleToStr(li_112, 0);
   string l_dbl2str_172 = DoubleToStr(li_116, 0);
   string l_dbl2str_180 = DoubleToStr(getProfit(), 2);
   string l_dbl2str_188 = DoubleToStr(li_40, 0);
   string l_dbl2str_196 = DoubleToStr(MaxRisk, 2);
   string l_dbl2str_204 = DoubleToStr(MarketInfo(Symbol(), MODE_LOTSTEP), 2);
   string l_dbl2str_212 = DoubleToStr(AccountLeverage(), 0);
   double l_lots_220 = 0;
   if (staticLot == 0.0) {
      l_lots_220 = NormalizeDouble(GetLot(ls_64, ls_72, ls_24, ls_32, AccountBalance(), ls_0 == "GBP" || ls_0 == "EUR" || ls_0 == "USD" || ls_0 == "JPY" || ls_0 == "CAD" ||
         ls_0 == "AUD" || ls_0 == "NZD" || ls_0 == "CHF", dynamicLot, minLot, maxLot), 2);
   } else l_lots_220 = staticLot;
   string l_dbl2str_228 = DoubleToStr(l_lots_220, 2);
   int li_unused_236 = 1;
   string ls_240 = "";
   string ls_248 = "";
   if (ECNBroker) ls_240 = "Yes";
   else ls_240 = "No";
   if (FifoRule) ls_248 = "Yes";
   else ls_248 = "No";
   string ls_256 = "tes";
   if (AccountFreeMargin() < 1000.0) ls_256 = "Please use balance $1000 for the best result.";
   if (AccountFreeMargin() > 1000.0 && AccountFreeMargin() < 2000.0) ls_256 = "You can set staticlot=0.01 to trade Gold or Silver (choose one)";
   if (AccountFreeMargin() > 2000.0 && AccountFreeMargin() < 3000.0) ls_256 = "You can set staticlot=0.01 to trade Gold and Silver \n    or you can trade 0.02 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 3000.0 && AccountFreeMargin() < 4000.0) ls_256 = "You can set staticlot=0.02 to trade Gold and Silver \n    or you can trade 0.03 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 4000.0 && AccountFreeMargin() < 5000.0) ls_256 = "You can set staticlot=0.02 to trade Gold and Silver \n    or you can trade 0.04 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 5000.0 && AccountFreeMargin() < 6000.0) ls_256 = "You can set staticlot=0.03 to trade Gold and Silver \n    or you can trade 0.05 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 6000.0 && AccountFreeMargin() < 7000.0) ls_256 = "You can set staticlot=0.03 to trade Gold and Silver \n    or you can trade 0.06 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 7000.0 && AccountFreeMargin() < 8000.0) ls_256 = "You can set staticlot=0.04 to trade Gold and Silver \n    or you can trade 0.07 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 8000.0 && AccountFreeMargin() < 9000.0) ls_256 = "You can set staticlot=0.04 to trade Gold and Silver \n    or you can trade 0.08 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 9000.0 && AccountFreeMargin() < 10000.0) ls_256 = "You can set staticlot=0.05 to trade Gold and Silver \n    or you can trade 0.09 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 10000.0 && AccountFreeMargin() < 20000.0) ls_256 = "You can set staticlot=0.05 to trade Gold and Silver \n    or you can trade 0.10 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 20000.0 && AccountFreeMargin() < 30000.0) ls_256 = "You can set staticlot=0.10 to trade Gold and Silver \n    or you can trade 0.20 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 30000.0 && AccountFreeMargin() < 40000.0) ls_256 = "You can set staticlot=0.20 to trade Gold and Silver \n    or you can trade 0.30 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 40000.0 && AccountFreeMargin() < 50000.0) ls_256 = "You can set staticlot=0.20 to trade Gold and Silver \n    or you can trade 0.40 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 50000.0 && AccountFreeMargin() < 60000.0) ls_256 = "You can set staticlot=0.30 to trade Gold and Silver \n    or you can trade 0.50 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 60000.0 && AccountFreeMargin() < 70000.0) ls_256 = "You can set staticlot=0.30 to trade Gold and Silver \n    or you can trade 0.60 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 70000.0 && AccountFreeMargin() < 80000.0) ls_256 = "You can set staticlot=0.40 to trade Gold and Silver \n    or you can trade 0.70 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 80000.0 && AccountFreeMargin() < 90000.0) ls_256 = "You can set staticlot=0.40 to trade Gold and Silver \n    or you can trade 0.80 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 90000.0 && AccountFreeMargin() < 100000.0) ls_256 = "You can set staticlot=0.50 to trade Gold and Silver \n    or you can trade 0.90 lot GOLD or SILVER only.";
   if (AccountFreeMargin() > 100000.0 && AccountFreeMargin() < 200000.0) ls_256 = "You can set staticlot=0.50 to trade Gold and Silver \n    or you can trade 1.00 lot GOLD or SILVER only.";
   int l_magic_264 = StrToDouble(reference);
   double l_ima_268 = 0;
   double l_ima_276 = 0;
   double l_ima_284 = 0;
   double l_ima_292 = 0;
   double l_ima_300 = 0;
   if (UseFilter == 1) {
      l_ima_268 = iMA(Symbol(), 0, 10, 0, MODE_EMA, PRICE_CLOSE, 0);
      l_ima_276 = iMA(Symbol(), 0, 20, 0, MODE_EMA, PRICE_CLOSE, 0);
      l_ima_284 = iMA(Symbol(), 0, 30, 0, MODE_EMA, PRICE_CLOSE, 0);
      l_ima_292 = iMA(Symbol(), 0, 40, 0, MODE_EMA, PRICE_CLOSE, 0);
      l_ima_300 = iMA(Symbol(), 0, 50, 0, MODE_EMA, PRICE_CLOSE, 0);
   }
   double l_ord_open_price_308 = 0;
   for (int l_pos_316 = 0; l_pos_316 < OrdersTotal(); l_pos_316++) {
      OrderSelect(l_pos_316, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == StrToDouble(reference))
         if (OrderType() == OP_BUY || OrderType() == OP_BUYSTOP) l_ord_open_price_308 = OrderOpenPrice();
   }
   string ls_320 = GetInstantOrder(ls_64, ls_72, ls_24, ls_32, li_112, li_116, UseFilter, l_price_88, l_ima_276, l_ima_284, l_ima_292, l_ima_300);
   string ls_328 = GetPendingOrder(ls_64, ls_72, ls_24, ls_32, li_112, li_116, l_ord_open_price_308, l_price_88, li_40, MaxTrades, l_point_104, UseFilter, l_ima_276, l_ima_284, l_ima_292, l_ima_300);
   double l_price_336 = NormalizeDouble(l_ord_open_price_308 - li_40 * Point, Digits);
   if (ls_72 == ls_80) ls_344 = "PC & Server License Matched!";
   else ls_344 = 

Показано первые 50% кода (символов: 14776)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 477,60₽ ≈ $18.06