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

City Basket Scalper

city basket scalper@amazing_owner.mqh
Вы автор или правообладатель?

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

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

О программе

City Basket Scalper — это библиотека для MetaTrader 4, реализующая визуальный дашборд для мониторинга и управления корзинными торговлями на множестве валютных пар одновременно. Продукт отображает на графике данные о ценах, спредах, сигналах, ADR-значениях и силе валют, а также предоставляет кнопки для ручного и автоматического открытия и закрытия позиций.

Система поддерживает до 28 пар, настраиваемые торговые сессии и корзинные параметры (лоты, максимальное число сделок, тейк-профит и стоп-лосс корзины). Встроенный трейлинг-блокировщик позволяет фиксировать прибыль по мере её роста. Дашборд обновляется с заданным интервалом и отображает текущие позиции, ордера и прибыль по каждой паре.

Продукт работает как включаемый файл (.mqh) и содержит три структуры для хранения данных о парах, сигналах и ADR, а также 36 пользовательских функций для управления торговлей и отображением информации. Автоматическая торговля включается через отдельный переключатель и предполагает использование ордеров MarketInfo/OrderSend стандартного MQL4 API.

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

НастройкаОписание
================================= (CITY_TRADER) Группа настроек управления советником: выбор пар, магический номер и автоторговля.
Use the default 28 pairs (UseDefaultPairs) Переключатель использования стандартного списка из 28 валютных пар.
Comma seperated own pair list (OwnPairs) Список пользовательских валютных пар через запятую (используется при отключённом UseDefaultPairs).
Dashboard update interval (DashUpdate) Интервал обновления дашборда: 0 — разово, 1 — каждую минуту, 5 — каждые 5 минут.
Magic_Number Магический номер для идентификации ордеров, открытых данным советником.
autotrade Переключатель автоматической торговли. При активации советник открывает позиции по сигналам дашборда.
================================= (CITY_TRIGGER) Группа настроек триггеров: минимальные значения пипсов и тепловой карты для открытия позиции.
Use Pips (trigger_use_Pips) Переключатель использования пипсов вместо тепловой карты для проверки минимального значения.
Minimum pips to open position (trade_MIN_pips) Минимальное количество пипсов для открытия позиции. 0 означает проверку по тепловой карте.
Use Heat Map 1 (trigger_UseHeatMap1) Переключатель использования тепловой карты 1 как триггера для открытия позиции.
TimeFrame for Heat Map 1 (trigger_TF_HM1) Таймфрейм для расчёта тепловой карты 1, используемой для генерации сигналов.
Minimum % HeatMap1 to open position (trade_MIN_HeatMap1) Минимальный процент сигнала тепловой карты 1 для открытия позиции.
================================= (CITY_BASKET) Группа настроек управления корзиной: лоты, максимальные сделки, тейк-профит и блокировки.
lot Размер лота для каждой позиции в корзине.
Max trades per pair (MaxTrades) Максимальное количество одновременных сделок на одну пару.
Max total trades overall (MaxTotalTrades) Максимальное общее количество открытых сделок по всем парам. 0 — без ограничений.
Max Spread Allowe (MaxSpread) Максимально допустимый спред в пунктах для открытия новых позиций.
Basket Take Profit in $ (Basket_Target) Общий тейк-профит корзины в долларах. При достижении прибыли корзина закрывается. 0 означает отключение.
Basket Stop Lloss in $ (Basket_StopLoss) Общий стоп-лосс корзины в долларах. При достижении убытка корзина закрывается. 0 означает отключение.
At profit 1 (BasketP1) Уровень прибыли 1, при достижении которого активируется первая блокировка. 0 означает отключение.
Lock 1 (BasketL1) Уровень фиксации блокировки (lock) при достижении прибыли 1. Используется для фиксации прибыли корзины.
At profit 2 (BasketP2) Уровень прибыли 2, при достижении которого активируется вторая блокировка. 0 означает отключение.
Lock 2 (BasketL2) Уровень фиксации блокировки (lock) при достижении прибыли 2. Используется для фиксации прибыли корзины.
At profit 3 (BasketP3) Уровень прибыли 3, при достижении которого активируется третья блокировка. 0 означает отключение.
Lock 3 (BasketL3) Уровень фиксации блокировки (lock) при достижении прибыли 3. Используется для фиксации прибыли корзины.
At profit 4 (BasketP4) Уровень прибыли 4, при достижении которого активируется четвёртая блокировка. 0 означает отключение.
Lock 4 (BasketL4) Уровень фиксации блокировки (lock) при достижении прибыли 4. Используется для фиксации прибыли корзины.
At profit 5 (BasketP5) Уровень прибыли 5, при достижении которого активируется пятая блокировка. 0 означает отключение.
Lock 5 (BasketL5) Уровень фиксации блокировки (lock) при достижении прибыли 5. Используется для фиксации прибыли корзины.
At profit 6 (BasketP6) Уровень прибыли 6, при достижении которого активируется шестая блокировка. 0 означает отключение.
Lock 6 (BasketL6) Уровень фиксации блокировки (lock) при достижении прибыли 6. Используется для фиксации прибыли корзины.
Trail the last set lock (TrailLastLock) Переключатель трейлинга последней установленной блокировки.
Trail distance 0 means last lock (TrailDistance) Расстояние трейлинга для последней блокировки. 0 означает использование значения последней блокировки.
Stop after this many profitable baskets (StopProfit) Количество прибыльных корзин, после которого советник останавливает торговлю. 0 означает отключение.
Takeprofit percent adr(10) 0=None (Adr1tp) Процент ADR(10), используемый для расчёта тейк-профита при открытии позиции. 0 означает отключение.
Stoploss adr percent adr(10) 0 = None (Adr1sl) Процент ADR(10), используемый для расчёта стоп-лосса при открытии позиции. 0 означает отключение.
Stop after this many losing baskets baskets (StopLoss) Количество убыточных корзин, после которого советник останавливает торговлю. 0 означает отключение.
Only adds trades in profit (OnlyAddProfit) Переключатель: при активации новые позиции добавляются только в прибыльных корзинах.
Close all trades after session(s) (CloseAllSession) Переключатель автоматического закрытия всех сделок при выходе за пределы торговых сессий.
================================= (CITY_TIME) Группа настроек управления торговыми сессиями: три настраиваемых временных интервала.
UseSession1 Переключатель активности первой торговой сессии.
sess1start Время начала первой торговой сессии в формате ЧЧ:ММ.
sess1end Время окончания первой торговой сессии в формате ЧЧ:ММ.
sess1comment Комментарий первой торговой сессии, отображаемый на дашборде.
UseSession2 Переключатель активности второй торговой сессии.
sess2start Время начала второй торговой сессии в формате ЧЧ:ММ.
sess2end Время окончания второй торговой сессии в формате ЧЧ:ММ.
sess2comment Комментарий второй торговой сессии, отображаемый на дашборде.
UseSession3 Переключатель активности третьей торговой сессии.
sess3start Время начала третьей торговой сессии в формате ЧЧ:ММ.
sess3end Время окончания третьей торговой сессии в формате ЧЧ:ММ.
sess3comment Комментарий третьей торговой сессии, отображаемый на дашборде.
================================= (CITY_CHART) Группа настроек управления графиком: таймфрейм, шаблон и координаты размещения дашборда.
TimeFrame to open chart (TimeFrame) Таймфрейм для открытия графика пары.
usertemplate Имя пользовательского шаблона графика, применяемого при открытии новых графиков пар.
x_axis Горизонтальная координата размещения дашборда на графике.
y_axis Вертикальная координата размещения дашборда на графике.

Состав библиотеки

Классов: 3 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 36

Классы
Класс class pairinf

Структура для хранения данных о паре: спред, пункты и сигнал.

Класс class signal

Структура для хранения данных о сигнале: цена, диапазон и процент сигнала.

Класс class adrval

Структура для хранения значений ADR (среднедневной амплитуды) пары.

Функции
Функция int OnInit()

Инициализация советника: создание панелей, кнопок и настройка массивов.

Функция void OnDeinit(const int reason)

Деинициализация советника: удаление всех графических объектов и остановка таймера.

Функция void OnTimer()

Таймерная функция: обновление данных, управление сделками и перерисовка дашборда.

Функция void SetText(string name,string text,int x,int y,color colour,int fontsize)

Создание текстового графического объекта с заданными координатами, цветом и размером шрифта.

Функция void SetObjText(string name,string CharToStr,int x,int y,color colour,int fontsize)

Создание текстового объекта на основе Wingdings с заданным символом и стилем.

Функция void SetPanel(string name,int sub_window,int x,int y,int width,int height,color bg_color,color border_clr,int border_width)

Создание панели-прямоугольника с заданными размерами, цветами и позицией.

Функция void ColorPanel(string name,color bg_color,color border_clr)

Изменение цветов фона и границы указанной панели.

Функция void Create_Button(string but_name,string label,int xsize,int ysize,int xdist,int ydist,int bcolor,int fcolor)

Создание кнопки на графике с заданными размерами, позицией и цветами.

Функция void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)

Обработка событий графика: реакция на нажатие кнопок и выполнение соответствующих действий.

Функция void buy_basket(string &pairs[])

Открытие серии покупок для указанного массива валютных пар.

Функция void sell_basket(string &pairs[])

Открытие серии продаж для указанного массива валютных пар.

Функция void close_cur_basket(string &pairs[])

Закрытие текущих позиций по указанному массиву валютных пар.

Функция void closeOpenOrders(string currency)

Закрытие открытых ордеров по указанной валюте.

Функция void close_basket(int magic_number)

Закрытие всех позиций с заданным магическим номером.

Функция void close_profit()

Закрытие всех прибыльных позиций.

Функция void close_loss()

Закрытие всех убыточных позиций.

Функция void Reset_EA()

Сброс параметров советника и перезапуск инициализации.

Функция void Trades()

Подсчёт и обновление данных по текущим открытым сделкам.

Функция void OpenChart(int ind)

Открытие графика для указанной пары с заданным таймфреймом и шаблоном.

Функция void GetAdrValues()

Расчёт значений ADR (среднедневной амплитуды) для каждой торговой пары.

Функция void GetSignals()

Получение текущих сигналов и рыночных данных для каждой пары.

Функция color Colorstr(double tot)

Возвращает цвет на основе значения прибыли для визуализации.

Функция void TradeManager()

Управление торговлей: проверка тейк-профита, стоп-лосса, трейлинга и блокировок.

Функция void PlotTrades()

Отображение данных о текущих сделках на дашборде.

Функция void PlotAdrValues()

Отображение значений ADR на дашборде.

Функция void PlotSpreadPips()

Отображение данных о спреде и пунктах на дашборде.

Функция bool inSession()

Проверка нахождения текущего времени в одной из заданных торговых сессий.

Функция void newSession()

Сброс статистики сессии при переходе к новой сессии.

Функция void ChngBoxCol(int mVal, int mBx)

Изменение цвета индикаторной панели в зависимости от значения процента сигнала.

Функция bool InArray(string &pairs[], string symbol)

Проверка наличия указанного символа в массиве пар.

Функция void displayMeter()

Обновление индикатора силы валют на дашборде.

Функция color color_for_profit(double total)

Возвращает цвет для визуализации силы валюты.

Функция double currency_strength(string pair)

Расчёт относительной силы указанной валюты.

Функция double Relative_strength(string pair1)

Обновление отображения графика после изменения графических объектов.

Функция void displayMeterStrength()

Возвращает цвет на основе значения силы для визуализации.

Функция color color_for_strength(double total)

Отображение индикатора относительной силы валют на дашборде.

Получить полный код

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

#property description   "Creat Ea By: Citytrader"
#property description   "Contact Ea Owner Telegram ID: Ceo_CityTrader"
#property description   "This Ea Free All User"
#property description   "Join in Telegram Group : "
#property icon "CityTrader.ico"
#property strict

int acc_number=0;

bool use_demo=True;
int demo_year=2023;
int demo_month=05;
int demo_day=31;

#include <stdlib.mqh>
#include <WinUser32.mqh>
#include <ChartObjects\ChartObjectsTxtControls.mqh>

#define BullColor Green
#define BearColor Red

enum dbu {Constant=0,OneMinute=1,FiveMinutes=5};

sinput   string   CITY_TRADER    = "EXPERT MANAGEMENT"; // =================================
sinput bool                      UseDefaultPairs            = true;              // Use the default 28 pairs
sinput string                    OwnPairs                   = "";                // Comma seperated own pair list
sinput dbu                       DashUpdate                 = 1;                 // Dashboard update interval
sinput int                       Magic_Number               = 9876;
sinput bool                      autotrade                  = false;

sinput   string  CITY_TRIGGER = "TRIGGER MANAGEMENT"; // =================================
sinput   bool                    trigger_use_Pips           = false;              // Use Pips
sinput   double                  trade_MIN_pips             = 500;                 // Minimum pips to open position
sinput   bool                    trigger_UseHeatMap1        = True;              // Use Heat Map 1
sinput   ENUM_TIMEFRAMES         trigger_TF_HM1             = 1440;                 // TimeFrame for Heat Map 1
sinput   double                  trade_MIN_HeatMap1         = 0.5;                // Minimum % HeatMap1 to open position

sinput   string   CITY_BASKET = "BASKET MANAGEMENT"; // =================================
sinput double                    lot                        = 0.01;
sinput int                       MaxTrades                  = 8;                  // Max trades per pair
sinput int                       MaxTotalTrades             = 0;                  // Max total trades overall
sinput int                       MaxSpread                  = 4.0;                // Max Spread Allowe
sinput int                       Basket_Target              = 0;                  // Basket Take Profit in $
sinput int                       Basket_StopLoss            = 0;                  // Basket Stop Lloss in $
sinput double                    BasketP1                   = 0.0;                // At profit 1
sinput double                    BasketL1                   = 0.0;                // Lock 1
sinput double                    BasketP2                   = 0.0;                // At profit 2
sinput double                    BasketL2                   = 0.0;                // Lock 2
sinput double                    BasketP3                   = 0.0;                // At profit 3
sinput double                    BasketL3                   = 0.0;                // Lock 3
sinput double                    BasketP4                   = 0.0;                // At profit 4
sinput double                    BasketL4                   = 0.0;                // Lock 4
sinput double                    BasketP5                   = 0.0;                // At profit 5
sinput double                    BasketL5                   = 0.0;                // Lock 5
sinput double                    BasketP6                   = 0.0;                // At profit 6
sinput double                    BasketL6                   = 0.0;                // Lock 6
sinput bool                      TrailLastLock              = true;               // Trail the last set lock
sinput double                    TrailDistance              = 0.0;                // Trail distance 0 means last lock
sinput int                       StopProfit                 = 0;                  // Stop after this many profitable baskets
sinput double                    Adr1tp                     = 10;                 // Takeprofit percent adr(10) 0=None
sinput double                    Adr1sl                     = 40;                 // Stoploss adr percent adr(10) 0 = None
sinput int                       StopLoss                   = 0;                  // Stop after this many losing baskets baskets
sinput bool                      OnlyAddProfit              = true;               // Only adds trades in profit 
sinput bool                      CloseAllSession            = false;              // Close all trades after session(s)

sinput   string   CITY_TIME = "TIME MANAGEMENT"; // =================================
sinput bool                      UseSession1                = true;
sinput string                    sess1start                 = "00:00";
sinput string                    sess1end                   = "23:59";
sinput string                    sess1comment               = "Currency Meter new";
sinput bool                      UseSession2                = false;
sinput string                    sess2start                 = "00:00";
sinput string                    sess2end                   = "23:59";
sinput string                    sess2comment               = "AUTO SESS2";
sinput bool                      UseSession3                = false;
sinput string                    sess3start                 = "00:00";
sinput string                    sess3end                   = "23:59";
sinput string                    sess3comment               = "AUTO SESS3";

sinput   string   CITY_CHART = "CHART MANAGEMENT"; // =================================
sinput ENUM_TIMEFRAMES           TimeFrame                  = 1440;                //TimeFrame to open chart
sinput string                    usertemplate               = "Dash";
sinput int                       x_axis                     =130;
sinput int                       y_axis                     =50;

int BeforeMin = 15;
int FontSize = 7;
string FontName = "Arial";
int ShiftX = 250;
int ShiftY = 70;
int Corner = 0;

string button_close_basket_All = "btn_Close ALL"; 
string button_close_basket_Prof = "btn_Close Prof";
string button_close_basket_Loss = "btn_Close Loss";

string button_reset_ea = "RESET EA";

string button_EUR_basket = "EUR_BASKET"; 
string button_EUR_basket_buy = "EUR_BASKET_BUY";
string button_EUR_basket_sell = "EUR_BASKET_SELL";
string button_EUR_basket_close = "EUR_BASKET_CLOSE";

string button_GBP_basket = "GBP_BASKET"; 
string button_GBP_basket_buy = "GBP_BASKET_BUY";
string button_GBP_basket_sell = "GBP_BASKET_SELL";
string button_GBP_basket_close = "GBP_BASKET_CLOSE";

string button_CHF_basket = "CHF_BASKET"; 
string button_CHF_basket_buy = "CHF_BASKET_BUY";
string button_CHF_basket_sell = "CHF_BASKET_SELL";
string button_CHF_basket_close = "CHF_BASKET_CLOSE";

string button_USD_basket = "USD_BASKET"; 
string button_USD_basket_buy = "USD_BASKET_BUY";
string button_USD_basket_sell = "USD_BASKET_SELL";
string button_USD_basket_close = "USD_BASKET_CLOSE";

string button_CAD_basket = "CAD_BASKET"; 
string button_CAD_basket_buy = "CAD_BASKET_BUY";
string button_CAD_basket_sell = "CAD_BASKET_SELL";
string button_CAD_basket_close = "CAD_BASKET_CLOSE";

string button_NZD_basket = "NZD_BASKET"; 
string button_NZD_basket_buy = "NZD_BASKET_BUY";
string button_NZD_basket_sell = "NZD_BASKET_SELL";
string button_NZD_basket_close = "NZD_BASKET_CLOSE";

string button_AUD_basket = "AUD_BASKET"; 
string button_AUD_basket_buy = "AUD_BASKET_BUY";
string button_AUD_basket_sell = "AUD_BASKET_SELL";
string button_AUD_basket_close = "AUD_BASKET_CLOSE";

string button_JPY_basket = "JPY_BASKET"; 
string button_JPY_basket_buy = "JPY_BASKET_BUY";
string button_JPY_basket_sell = "JPY_BASKET_SELL";
string button_JPY_basket_close = "JPY_BASKET_CLOSE";

string DefaultPairs[] = {"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD","CADCHF","CADJPY","CHFJPY","EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD","EURUSD","GBPAUD","GBPCAD","GBPCHF","GBPJPY","GBPNZD","GBPUSD","NZDCAD","NZDCHF","NZDJPY","NZDUSD","USDCAD","USDCHF","USDJPY"};
string TradePairs[];
string curr[8] = {"USD","EUR","GBP","JPY","AUD","NZD","CAD","CHF"};
string EUR[7] = {"EURAUD","EURCAD","EURCHF","EURGBP","EURJPY","EURNZD","EURUSD"};
string GBP[6] = {"GBPAUD","GBPCAD","GBPCHF","GBPJPY","GBPNZD","GBPUSD"};
string GBP_R[1] = {"EURGBP"};
string CHF[1] = {"CHFJPY"};
string CHF_R[6] = {"AUDCHF","CADCHF","EURCHF","GBPCHF","NZDCHF","USDCHF"};
string USD[3] = {"USDCAD","USDCHF","USDJPY"};
string USD_R[4] = {"AUDUSD","EURUSD","GBPUSD","NZDUSD"};
string CAD[2] = {"CADCHF","CADJPY"};
string CAD_R[5] = {"AUDCAD","EURCAD","GBPCAD","NZDCAD","USDCAD"};
string NZD[4] = {"NZDCAD","NZDCHF","NZDJPY","NZDUSD"};
string NZD_R[3] = {"AUDNZD","EURNZD","GBPNZD"};
string AUD[5] = {"AUDCAD","AUDCHF","AUDJPY","AUDNZD","AUDUSD"};
string AUD_R[2] = {"EURAUD","GBPAUD"};
string JPY_R[7] = {"AUDJPY","CADJPY","CHFJPY","EURJPY","GBPJPY","NZDJPY","USDJPY"};

string   _font="Consolas";

struct pairinf {
   double PairPip;
   int pipsfactor;
   double Pips;
   double Spread;
   double point;
   int lastSignal;
}; pairinf pairinfo[];

#define NONE 0
#define DOWN -1
#define UP 1

#define NOTHING 0
#define BUY 1
#define SELL 2

struct signal { 
   string symbol;
   double range;
   double ratio;
   double calc;
   double high;
   double low;
   double open;
   double close;
   double point;   
   double Signalperc;    
   double ask;
   double bid;
   double bidratio;
   int    digit;

}; signal signals[];

double totalbuystrength,totalsellstrength;

color ProfitColor,ProfitColor1,ProfitColor2,ProfitColor3,PipsColor,LotColor,LotColor1,OrdColor,OrdColor1;
color BackGrnCol =C'20,20,20';
color LineColor=clrWhite;
color TextColor=clrGreen;

struct adrval {
   double adr;
   double adr1;
   double adr5;
   double adr10;
   double adr20;
}; adrval adrvalues[];

double totalprofit,totallots;

datetime s1start,s2start,s3start;
datetime s1end,s2end,s3end;

string comment;
int strper = PERIOD_W1;
int profitbaskets = 0;
int lossbaskets = 0;
int ticket;
int    orders  = 0;
double blots[28],slots[28],bprofit[28],sprofit[28],tprofit[28],bpos[28],spos[28];
bool CloseAll;
string postfix=StringSubstr(Symbol(),6,6);
int   symb_cnt=0;
int period1[]= {240,1440,10080};
double factor;
int labelcolor; 
double GetBalanceSymbol,SymbolMaxDD,SymbolMaxHi;
double PercentFloatingSymbol=0;
double PercentMaxDDSymbol=0;
datetime newday=0;
datetime newm1=0; 
bool   Accending=true;
/* HP */
int localday = 99;
bool s1active = false;
bool s2active = false;
bool s3active = false;
MqlDateTime sess;
string strspl[];
double currentlock = 0.0;
bool trailstarted = false;
double lockdistance = 0.0;
int totaltrades = 0;
int maxtotaltrades=0;
double stoploss;
double takeprofit;
/* HP */

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

void OnDeinit(const int reason)
  {

   EventKillTimer();
   ObjectsDeleteAll();

  }

void OnTimer() {

   Trades();

   TradeManager();

   PlotTrades();

   PlotSpreadPips();

      GetSignals();  

      displayMeter();

   if (newday != iTime("EURUSD"+postfix,PERIOD_D1,0)) {
      GetAdrValues();
      PlotAdrValues();
      newday = iTime("EURUSD"+postfix,PERIOD_D1,0);
   }

   if (DashUpdate == 0 || (DashUpdate == 1 && newm1 != iTime("EURUSD"+postfix,PERIOD_M1,0)) || (DashUpdate == 5 && newm1 != iTime("EURUSD"+postfix,PERIOD_M5,0))) {

   for(int i=0;i<ArraySize(TradePairs);i++) 
   for(int a=0;a<5;a++){

       ChngBoxCol((signals[i].Signalperc * 100), i);      

     SetText("high"+IntegerToString(i),DoubleToStr(signals[i].high,signals[i].digit),x_axis+258,(i*16)+y_axis+2,clrDimGray,7);
     SetText("ask"+IntegerToString(i),DoubleToStr(signals[i].ask,signals[i].digit),x_axis+318,(i*16)+y_axis+2,clrDimGray,7); 
     SetText("bid"+IntegerToString(i),DoubleToStr(signals[i].bid,signals[i].digit),x_axis+378,(i*16)+y_axis+2,clrDimGray,7); 
     SetText("low"+IntegerToString(i),DoubleToStr(signals[i].low,signals[i].digit),x_axis+438,(i*16)+y_axis+2,clrDimGray,7); 
     SetText("pointrange"+IntegerToString(i),DoubleToStr(signals[i].range,0),x_axis+503,(i*16)+y_axis+2,clrDimGray,7); 
     SetText("bidratio"+IntegerToString(i),DoubleToStr(signals[i].bidratio,2)+"%",x_axis+543,(i*16)+y_axis+2,clrDimGray,7);   

    SetText("fxs"+IntegerToString(i),DoubleToStr(MathAbs(signals[i].ratio),1)+"%",x_axis-100,(i*16)+y_axis,Colorstr(signals[i].ratio),8);
    if(signals[i].ratio>0){SetObjText("Sig"+IntegerToString(i),CharToStr(217),x_axis-70,(i*16)+y_axis,clrBlue,12);}
    else if(signals[i].ratio<0){SetObjText("Sig"+IntegerToString(i),CharToStr(218),x_axis-70,(i*16)+y_axis,clrFireBrick,12);}

      if ((pairinfo[i].Pips > trade_MIN_pips || trigger_use_Pips==false)      
      &&(signals[i].Signalperc >trade_MIN_HeatMap1 || trigger_UseHeatMap1==false))
       {
         labelcolor = C'20,20,20';
         if ((bpos[i]+spos[i]) < MaxTrades && pairinfo[i].lastSignal != BUY && autotrade == true && (OnlyAddProfit == false || bprofit[i] >= 0.0) && pairinfo[i].Spread <= MaxSpread && inSession() == true && totaltrades <= maxtotaltrades) {
            pairinfo[i].lastSignal = BUY;
            ticket=OrderSend(TradePairs[i],OP_BUY,lot,MarketInfo(TradePairs[i],MODE_ASK),100,0,0,"CiTy-Basket Scalper",Magic_Number,0,Blue);
            if (OrderSelect(ticket,SELECT_BY_TICKET) == true) {
               stoploss = OrderOpenPrice() - ((adrvalues[i].adr10 / 100) * Adr1sl) * pairinfo[i].PairPip;
               takeprofit = OrderOpenPrice() + ((adrvalues[i].adr10 / 100) * Adr1tp) * pairinfo[i].PairPip;
               OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(stoploss,MarketInfo(TradePairs[i],MODE_DIGITS)),NormalizeDouble(takeprofit,MarketInfo(TradePairs[i],MODE_DIGITS)),0,clrBlue);
            }
         }
      } else {
         if ((pairinfo[i].Pips < -trade_MIN_pips || trigger_use_Pips==false)         
         &&(signals[i].Signalperc <-trade_MIN_HeatMap1 || trigger_UseHeatMap1==false))
         {
            labelcolor = C'20,20,20';//clrFireBrick;
            if ((bpos[i]+spos[i]) < MaxTrades && pairinfo[i].lastSignal != SELL && autotrade == true && (OnlyAddProfit == false || sprofit[i] >= 0.0) && pairinfo[i].Spread <= MaxSpread && inSession() == true && totaltrades <= maxtotaltrades) {
               pairinfo[i].lastSignal = SELL;
               ticket=OrderSend(TradePairs[i],OP_SELL,lot,MarketInfo(TradePairs[i],MODE_BID),100,0,0,"CiTy-Basket Scalper",Magic_Number,0,Red);
               if (OrderSelect(ticket,SELECT_BY_TICKET) == true) {
                  stoploss = OrderOpenPrice() + ((adrvalues[i].adr10 / 100) * Adr1sl) * pairinfo[i].PairPip;
                  takeprofit = OrderOpenPrice() - ((adrvalues[i].adr10 / 100) * Adr1tp) * pairinfo[i].PairPip;
                  OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(stoploss,MarketInfo(TradePairs[i],MODE_DIGITS)),NormalizeDouble(takeprofit,MarketInfo(TradePairs[i],MODE_DIGITS)),0,clrBlue);
               }
            }
         } else {
            labelcolor = BackGrnCol;
            pairinfo[i].lastSignal = NOTHING;
         }  
      }          

         ColorPanel("Spread"+IntegerToString(i),labelcolor,C'61,61,61');        
         ColorPanel("Pips"+IntegerToString(i),labelcolor,C'61,61,61');
         ColorPanel("Adr"+IntegerToString(i),labelcolor,C'61,61,61');         
         ColorPanel("TP",Black,Black);
         ColorPanel("TP1",Black,Black);
         ColorPanel("TP2",Black,Black);
         ColorPanel("TP3",Black,Black);
         ColorPanel("TP4",Black,Black);
         ColorPanel("TP5",Black,Black);        
         ColorPanel("A2"+IntegerToString(i),labelcolor,C'61,61,61');          

      }
      if (DashUpdate == 1)
         newm1 = iTime("EURUSD"+postfix,PERIOD_M1,0);
      else if (DashUpdate == 5)
         newm1 = iTime("EURUSD"+postfix,PERIOD_M5,0);
   }
   WindowRedraw();    
}

void SetText(string name,string text,int x,int y,color colour,int fontsize=12)
  {
   if (ObjectFind(0,name)<0)
      ObjectCreate(0,name,OBJ_LABEL,0,0,0);

    ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
    ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
    ObjectSetInteger(0,name,OBJPROP_COLOR,colour);
    ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize);
    ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
    ObjectSetString(0,name,OBJPROP_TEXT,text);
  }

void SetObjText(string name,string CharToStr,int x,int y,color colour,int fontsize=12)
  {
   if(ObjectFind(0,name)<0)
      ObjectCreate(0,name,OBJ_LABEL,0,0,0);

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize);
   ObjectSetInteger(0,name,OBJPROP_COLOR,colour);
   ObjectSetInteger(0,name,OBJPROP_BACK,false);
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
   ObjectSetString(0,name,OBJPROP_TEXT,CharToStr);
   ObjectSetString(0,name,OBJPROP_FONT,"Wingdings");
  }  

void SetPanel(string name,int sub_window,int x,int y,int width,int height,color bg_color,color border_clr,int border_width)
  {
   if(ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
     {
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,height);
      ObjectSetInteger(0,name,OBJPROP_COLOR,border_clr);
      ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,BORDER_FLAT);
      ObjectSetInteger(0,name,OBJPROP_WIDTH,border_width);
      ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
      ObjectSetInteger(0,name,OBJPROP_BACK,true);
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,0);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,0);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
      ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
     }
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,bg_color);
  }
void ColorPanel(string name,color bg_color,color border_clr)
  {
   ObjectSetInteger(0,name,OBJPROP_COLOR,border_clr);
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,bg_color);
  }

void Create_Button(string but_name,string label,int xsize,int ysize,int xdist,int ydist,int bcolor,int fcolor)
{

   if(ObjectFind(0,but_name)<0)
   {
      if(!ObjectCreate(0,but_name,OBJ_BUTTON,0,0,0))
        {
         Print(__FUNCTION__,
               ": failed to create the button! Error code = ",GetLastError());
         return;
        }
      ObjectSetString(0,but_name,OBJPROP_TEXT,label);
      ObjectSetInteger(0,but_name,OBJPROP_XSIZE,xsize);
      ObjectSetInteger(0,but_name,OBJPROP_YSIZE,ysize);
      ObjectSetInteger(0,but_name,OBJPROP_CORNER,CORNER_LEFT_UPPER);     
      ObjectSetInteger(0,but_name,OBJPROP_XDISTANCE,xdist);      
      ObjectSetInteger(0,but_name,OBJPROP_YDISTANCE,ydist);         
      ObjectSetInteger(0,but_name,OBJPROP_BGCOLOR,bcolor);
      ObjectSetInteger(0,but_name,OBJPROP_COLOR,fcolor);
      ObjectSetInteger(0,but_name,OBJPROP_FONTSIZE,8);
      ObjectSetInteger(0,but_name,OBJPROP_HIDDEN,true);

      ObjectSetInteger(0,but_name,OBJPROP_BORDER_TYPE,BORDER_RAISED);

      ChartRedraw();      
   }

}
void OnChartEvent(const int id,  const long &lparam, const double &dparam,  const string &sparam)
  {
   if(id==CHARTEVENT_OBJECT_CLICK)

      {
       if (sparam==button_AUD_basket_buy)
        {          
               buy_basket(AUD);
               sell_basket(AUD_R);
               ObjectSetInteger(0,button_AUD_basket_buy,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_AUD_basket_sell)
        {          
               sell_basket(AUD);
               buy_basket(AUD_R);
               ObjectSetInteger(0,button_AUD_basket_sell,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_CAD_basket_buy)
        {          
               buy_basket(CAD);
               sell_basket(CAD_R);
               ObjectSetInteger(0,button_CAD_basket_buy,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_CAD_basket_sell)
        {          
               sell_basket(CAD);
               buy_basket(CAD_R);
               ObjectSetInteger(0,button_CAD_basket_sell,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_CHF_basket_buy)
        {          
               buy_basket(CHF);
               sell_basket(CHF_R);
               ObjectSetInteger(0,button_CHF_basket_buy,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_CHF_basket_sell)
        {          
               sell_basket(CHF);
               buy_basket(CHF_R);
               ObjectSetInteger(0,button_CHF_basket_sell,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_EUR_basket_buy)
        {          
               buy_basket(EUR);
               ObjectSetInteger(0,button_EUR_basket_buy,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_EUR_basket_sell)
        {          
               sell_basket(EUR);
               ObjectSetInteger(0,button_EUR_basket_sell,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_GBP_basket_buy)
        {          
               buy_basket(GBP);
               sell_basket(GBP_R);
               ObjectSetInteger(0,button_GBP_basket_buy,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_GBP_basket_sell)
        {          
               sell_basket(GBP);
               buy_basket(GBP_R);
               ObjectSetInteger(0,button_GBP_basket_sell,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_JPY_basket_buy)
        {          
               sell_basket(JPY_R);
               ObjectSetInteger(0,button_JPY_basket_buy,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_JPY_basket_sell)
        {          
               buy_basket(JPY_R);
               ObjectSetInteger(0,button_JPY_basket_sell,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_NZD_basket_buy)
        {          
               buy_basket(NZD);
               sell_basket(NZD_R);
               ObjectSetInteger(0,button_NZD_basket_buy,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_NZD_basket_sell)
        {          
               sell_basket(NZD);
               buy_basket(NZD_R);
               ObjectSetInteger(0,button_NZD_basket_sell,OBJPROP_STATE,0);
               return;
        }

      if (sparam==button_USD_basket_buy)
        {    

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

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

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

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

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

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

Стоимость полного кода
4 879,20₽ ≈ $59.63