class pairinf
Структура для хранения данных о паре: спред, пункты и сигнал.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.