class pairinf
Структура данных для хранения информации о валютной паре: значения пункта, спреда, последнего сигнала и индексов базовой и котируемой валют.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «elise-ea-zup.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Данный файл является библиотекой исходного кода для торгового эксперта Elise-EA-ZUP, написанной на языке MQL4 для платформы MetaTrader 4. Библиотека содержит вспомогательные функции и структуры данных, используемые для управления торговлей, отображения информации на графике и расчёта сигналов. В коде присутствуют проверки лицензии и имени эксперта, а также настройки торговых сессий и управления капиталом.
Библиотека включает четыре структуры данных: pairinf, signal, currency и adrval, которые используются для хранения информации о валютных парах, сигналах, силе валют и значениях среднего дневного диапазона. Также определены 38 функций, среди которых обработчики событий OnInit, OnDeinit, OnTimer, OnChartEvent, функции для создания и управления графическими объектами, функции для открытия и закрытия позиций, управления корзиной ордеров, расчёта сигналов и отображения данных на графике.
Основное назначение библиотеки — предоставить набор инструментов для реализации торговой логики эксперта, включая управление позициями, отображение панели управления и расчёт показателей для принятия торговых решений. Библиотека не является самостоятельным торговым советником, а представляет собой набор функций для использования в основном файле эксперта.
| Настройка | Описание |
|---|---|
| ============ Expert Name ============ (t_trade) | Заголовок названия эксперта — Заголовок раздела с названием эксперта. |
| Use the default 28 pairs (UseDefaultPairs) | Использовать стандартные пары — Использовать предустановленный список из 28 валютных пар. |
| Comma seperated own pair list (EURUSD,GBPUSD,....) (OwnPairs) | Собственные пары — Список собственных торговых пар, разделённых запятыми. |
| Magic_Number | Магический номер — Уникальный идентификатор ордеров, открываемых экспертом. |
| Autotrade (autotrade) | Автоторговля — Разрешить автоматическое открытие позиций экспертом. |
| ================================= (t_basket) | Заголовок управления капиталом — Заголовок раздела управления капиталом. |
| lot | Лот — Объём лота для открываемых позиций. |
| Max trades per pair (MaxTrades) | Максимум сделок на пару — Максимальное количество одновременно открытых позиций по одной паре. |
| Max total trades overall (MaxTotalTrades) | Максимум сделок всего — Максимальное общее количество одновременно открытых позиций по всем парам. |
| Max Spread Allowe (MaxSpread) | Максимальный спред — Максимально допустимый спред для открытия позиций. |
| Takeprofit in pips (Piptp) | Тейк-профит в пунктах — Размер тейк-профита в пунктах. |
| Stoploss in pips (Pipsl) | Стоп-лосс в пунктах — Размер стоп-лосса в пунктах. |
| Profit (BasketP1) | Прибыль корзины 1 — Целевой уровень прибыли для первой корзины. |
| Lock (BasketL1) | Блокировка прибыли корзины 1 — Уровень блокировки прибыли для первой корзины. |
| ================================= (t_time) | Заголовок управления временем — Заголовок раздела управления временем. |
| Trading Time Session 1 (UseSession1) | Использовать сессию 1 — Включить первую торговую сессию. |
| Start (sess1start) | Начало сессии 1 — Время начала первой торговой сессии. |
| Stop (sess1end) | Конец сессии 1 — Время окончания первой торговой сессии. |
| Trading Time Session 2 (UseSession2) | Использовать сессию 2 — Включить вторую торговую сессию. |
| Start (sess2start) | Начало сессии 2 — Время начала второй торговой сессии. |
| Stop (sess2end) | Конец сессии 2 — Время окончания второй торговой сессии. |
| Trading Time Session 3 (UseSession3) | Использовать сессию 3 — Включить третью торговую сессию. |
| Start (sess3start) | Начало сессии 3 — Время начала третьей торговой сессии. |
| Stop (sess3end) | Конец сессии 3 — Время окончания третьей торговой сессии. |
Классов: 4 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 38
class pairinf
Структура данных для хранения информации о валютной паре: значения пункта, спреда, последнего сигнала и индексов базовой и котируемой валют.
class signal
Структура данных для хранения сигналов и расчётных показателей по торговому инструменту.
class currency
Структура данных для хранения силы валюты, предыдущего значения, синхронизации и времени последнего бара.
class adrval
Структура данных для хранения значений среднего дневного диапазона за разные периоды.
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 closecurr)
Закрытие всех открытых позиций и удаление отложенных ордеров по указанному символу с заданным магическим номером.
void close_basket(int magic_number)
Закрытие всех позиций с указанным магическим номером и сброс внутренних переменных состояния.
void close_profit()
Закрытие всех прибыльных позиций с заданным магическим номером.
void close_loss()
Закрытие всех убыточных позиций с заданным магическим номером.
void Reset_EA()
Сброс внутренних переменных состояния эксперта и повторная инициализация.
void Trades()
Сбор и обновление статистики по открытым позициям: количество, объёмы, прибыль по каждой паре.
void OpenChart(int ind)
Открытие или активация графика для указанной торговой пары с заданным таймфреймом и шаблоном.
void TradeManager()
Управление корзиной позиций: закрытие по достижении целевой прибыли, стоп-лосса, блокировки прибыли и трейлинга.
void PlotTrades()
Отрисовка на графике информации о позициях, объёмах и прибыли по каждой торговой паре.
void PlotAdrValues()
Отрисовка значений среднего дневного диапазона для каждой торговой пары.
bool inSession()
Проверка, находится ли текущее время в одной из активных торговых сессий.
void newSession()
Сброс счётчиков прибыльных и убыточных корзин, а также переменных состояния при начале новой сессии.
void ChngBoxCol(int mVal, int mBx)
Изменение цвета фона графического объекта в зависимости от переданного значения.
bool InArray(string &pairs[], string symbol)
Проверка наличия указанного символа в массиве торговых пар.
void PlotSpreadPips()
Расчёт и отображение спреда и изменения цены в пунктах для каждой торговой пары.
void GetAdrValues()
Расчёт среднего дневного диапазона за 1, 5, 10 и 20 дней для каждой торговой пары.
void GetSignals()
Расчёт сигналов для каждой торговой пары на основе соотношений, силы валют и других показателей.
color Colorstr(double tot)
Возврат цвета в зависимости от значения соотношения bid/ask.
color ColorBSRat(double tot)
Возврат цвета в зависимости от значения соотношения покупок и продаж.
color ColorGap(double tot)
Возврат цвета в зависимости от значения разрыва силы валют.
void comments()
Вывод комментария на графике с информацией о счёте, времени торговли и авторе.
void displayMeter()
Отображение на графике индикатора силы валют с сортировкой и цветовой индикацией.
color color_for_profit(double total)
Возврат цвета в зависимости от значения прибыли или силы валюты.
double currency_strength(string pair)
Расчёт текущей силы указанной валюты на основе данных по торговым парам.
double old_currency_strength(string pair)
Расчёт предыдущей силы указанной валюты на основе исторических данных.
color Colorsync(double tot)
Возврат цвета в зависимости от значения относительной силы валюты.
#property version "5.2"
#property description "= Minimum Deposit 1000$ ="
#property description "----------Contact me-----------"
#property description "Join our Telegram Group : "
#property description "Telegram: "
#property description ""
#property strict
#include <stdlib.mqh>
#include <WinUser32.mqh>
#include <ChartObjects\ChartObjectsTxtControls.mqh>
#define BullColor Lime
#define BearColor Red
enum dbu {Constant=0,OneMinute=1,FiveMinutes=5};
sinput string t_trade = "************ ELISE EA LICENSE ************"; // ============ Expert Name ============
sinput bool UseDefaultPairs = true; // Use the default 28 pairs
sinput string OwnPairs = ""; // Comma seperated own pair list (EURUSD,GBPUSD,....)
dbu DashUpdate = 1;
sinput int Magic_Number = 785279;
sinput bool autotrade = false; // Autotrade
string t_trigger = "TRIGGER MANAGEMENT"; // =================================
bool trigger_use_Pips = false; // Use Pips
double trade_MIN_pips = 20; // Minimum pips to open position
bool trigger_UseHeatMap1 = false; // Use Heat Map
ENUM_TIMEFRAMES trigger_TF_HM1 = 1440; // TimeFrame for Heat Map
double trade_MIN_HeatMap1 = 0.5; // Minimum % HeatMap to open position
bool trigger_use_bidratio = true; // Use BidRatio filtering
double trigger_buy_bidratio = 80; // % Level to open Buy
double trigger_sell_bidratio = 7; // % Level to open Sell
bool trigger_use_relstrength = true; // Use Relative Strength filtering (Base)
double trigger_buy_relstrength = 4.0; // Strenth to open Buy
double trigger_sell_relstrength =-4.0; // Strength to open Sell
bool trigger_use_buysellratio = true; // Use Buy/Sell Ratio filtering
double trigger_buy_buysellratio = 4.0; // Level to open Buy
double trigger_sell_buysellratio = -4.0; // level to open Sell
bool trigger_use_gap = false; // Use Gap filtering
double trigger_gap_buy = 2.25; // Gap level to open Buy
double trigger_gap_sell = -2.25; // Gap level to open Sell
sinput string t_basket = "MONEY MANAGEMENT"; // =================================
sinput double lot = 0.01;
sinput int MaxTrades = 1; // Max trades per pair
sinput int MaxTotalTrades = 0; // Max total trades overall
sinput double MaxSpread = 50.0; // Max Spread Allowe
int Basket_Target = 0; // Basket Take Profit in $
int Basket_StopLoss = 0; // Basket Stop Lloss in $
sinput int Piptp = 0; // Takeprofit in pips
sinput int Pipsl = 0; // Stoploss in pips
sinput double BasketP1 = 100.0; // Profit
sinput double BasketL1 = 80.0; // Lock
double BasketP2 = 0.0; // At profit 2
double BasketL2 = 0.0; // Lock 2
double BasketP3 = 0.0; // At profit 3
double BasketL3 = 0.0; // Lock 3
double BasketP4 = 0.0; // At profit 4
double BasketL4 = 0.0; // Lock 4
double BasketP5 = 0.0; // At profit 5
double BasketL5 = 0.0; // Lock 5
double BasketP6 = 0.0; // At profit 6
double BasketL6 = 0.0; // Lock 6
bool TrailLastLock = true; // Trail the last set lock
double TrailDistance = 0.0; // Trail distance 0 means last lock
int StopProfit = 0; // Stop after this many profitable baskets
double Adr1tp = 0; // Takeprofit percent adr(10) 0=None
double Adr1sl = 0; // Stoploss adr percent adr(10) 0 = None
int StopLoss = 0; // Stop after this many losing baskets baskets
bool OnlyAddProfit = true; // Only adds trades in profit
bool CloseAllSession = false; // Close all trades after session(s)
sinput string t_time = "TIME MANAGEMENT"; // =================================
sinput bool UseSession1 = true; // Trading Time Session 1
sinput string sess1start = "00:00"; // Start
sinput string sess1end = "23:59"; // Stop
string sess1comment = "[";
sinput bool UseSession2 = false; // Trading Time Session 2
sinput string sess2start = "00:00"; // Start
sinput string sess2end = "23:59"; // Stop
string sess2comment = "[";
sinput bool UseSession3 = false; // Trading Time Session 3
sinput string sess3start = "00:00"; // Start
sinput string sess3end = "23:59"; // Stop
string sess3comment = "[";
string t_chart = "CHART MANAGEMENT"; // =================================
ENUM_TIMEFRAMES TimeFrame = 1440; //TimeFrame to open chart
string usertemplate = "default";
int x_axis =0;
int y_axis =70;
int BeforeMin = 15;
int FontSize = 10;
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 PipsSig;
double Pipsprev;
double Spread;
double point;
int lastSignal;
int base;
int quote;
}; 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 range1;
double ratio;
double ratio1;
double bidratio;
double fact;
double strength;
double strength_old;
double strength1;
double strength2;
double calc;
double strength3;
double strength4;
double strength5;
double strength6;
double strength7;
double strength8;
double strength_Gap;
double hi;
double lo;
double prevratio;
double prevbid;
int shift;
double open;
double close;
double bid;
double point;
double Signalperc;
double SigRatio;
double SigRelStr;
double SigBSRatio;
double SigCRS;
double SigGap;
double SigGapPrev;
double SigRatioPrev;
}; signal signals[];
struct currency
{
string curr;
double strength;
double prevstrength;
double crs;
int sync;
datetime lastbar;
}
; currency currencies[8];
double totalbuystrength,totalsellstrength;
color ProfitColor,ProfitColor1,ProfitColor2,ProfitColor3,PipsColor,LotColor,LotColor1,OrdColor,OrdColor1;
color BackGrnCol =C'20,20,20';
color LineColor=clrBlack;
color TextColor=clrBlack;
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,10);
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;
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;
double currstrength[8];
double prevstrength[8];
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);
if (((pairinfo[i].PipsSig==UP && pairinfo[i].Pips > trade_MIN_pips) || trigger_use_Pips==false)
&& ((signals[i].SigRatioPrev==UP && signals[i].ratio>=trigger_buy_bidratio) || trigger_use_bidratio==false)
&& (signals[i].calc>=trigger_buy_relstrength || trigger_use_relstrength==false)
&& (signals[i].strength5>=trigger_buy_buysellratio || trigger_use_buysellratio==false)
&& ((signals[i].SigGapPrev==UP && signals[i].strength_Gap>=trigger_gap_buy) || trigger_use_gap==false)
&&(signals[i].Signalperc >trade_MIN_HeatMap1 || trigger_UseHeatMap1==false))
{
labelcolor = clrGreen;
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;
while (IsTradeContextBusy()) Sleep(100);
ticket=OrderSend(TradePairs[i],OP_BUY,lot,MarketInfo(TradePairs[i],MODE_ASK),100,0,0,StringConcatenate("@EliseTrendEA-", TradePairs[i], "-", Period()),Magic_Number,0,Blue);
if (OrderSelect(ticket,SELECT_BY_TICKET) == true) {
if (Pipsl != 0.0)
stoploss=OrderOpenPrice() - Pipsl * pairinfo[i].PairPip;
else
if (Adr1sl != 0.0)
stoploss=OrderOpenPrice() - ((adrvalues[i].adr10/100)*Adr1sl) * pairinfo[i].PairPip;
else
stoploss = 0.0;
if (Piptp != 0.0)
takeprofit=OrderOpenPrice() + Piptp * pairinfo[i].PairPip;
else
if (Adr1tp != 0.0)
takeprofit=OrderOpenPrice() + ((adrvalues[i].adr10/100)*Adr1tp) * pairinfo[i].PairPip;
else
takeprofit = 0.0;
while (IsTradeContextBusy()) Sleep(100);
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(stoploss,MarketInfo(TradePairs[i],MODE_DIGITS)),NormalizeDouble(takeprofit,MarketInfo(TradePairs[i],MODE_DIGITS)),0,clrBlue);
}
}
} else {
if (((pairinfo[i].PipsSig==DOWN && pairinfo[i].Pips < -trade_MIN_pips) || trigger_use_Pips==false)
&& ((signals[i].SigRatioPrev==DOWN && signals[i].ratio<=trigger_sell_bidratio) || trigger_use_bidratio==false)
&& (signals[i].calc<=trigger_sell_relstrength || trigger_use_relstrength==false)
&& (signals[i].strength5<=trigger_sell_buysellratio || trigger_use_buysellratio==false)
&& ((signals[i].SigGapPrev==DOWN && signals[i].strength_Gap<=trigger_gap_sell) || trigger_use_gap==false)
&&(signals[i].Signalperc <-trade_MIN_HeatMap1 || trigger_UseHeatMap1==false))
{
labelcolor = clrTomato;
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;
while (IsTradeContextBusy()) Sleep(100);
ticket=OrderSend(TradePairs[i],OP_SELL,lot,MarketInfo(TradePairs[i],MODE_BID),100,0,0,StringConcatenate("@EliseTrendEA-", TradePairs[i], "-", Period()),Magic_Number,0,Red);
if (OrderSelect(ticket,SELECT_BY_TICKET) == true) {
if (Pipsl != 0.0)
stoploss=OrderOpenPrice() + Pipsl * pairinfo[i].PairPip;
else
if (Adr1sl != 0.0)
stoploss=OrderOpenPrice()+((adrvalues[i].adr10/100)*Adr1sl) *pairinfo[i].PairPip;
else
stoploss = 0.0;
if (Piptp != 0.0)
takeprofit=OrderOpenPrice() - Piptp * pairinfo[i].PairPip;
else
if (Adr1tp != 0.0)
takeprofit=OrderOpenPrice() - ((adrvalues[i].adr10/100)*Adr1tp) * pairinfo[i].PairPip;
else
takeprofit = 0.0;
while (IsTradeContextBusy()) Sleep(100);
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;
}
}
/*string HM0 = iCustom(NULL, 0, "Zup_Universal",5, 10, "Arial", 585 , 250, 0 , 0,i);
string HM1 = iCustom(NULL, 0, "Zup_Universal",15, 10, "Arial", 620 , 250, 0 , 0,i);
string HM2 = iCustom(NULL, 0, "Zup_Universal",60, 10, "Arial", 655 , 250, 0 , 0,i);
string HM3 = iCustom(NULL, 0, "Zup_Universal",240, 10, "Arial", 690 , 250, 0 , 0,i);
string HM4 = iCustom(NULL, 0, "Zup_Universal",1440, 10, "Arial", 725 , 250, 0 , 0,i);
*/
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,White);
ColorPanel("TP1",Black,White);
ColorPanel("TP2",Black,White);
ColorPanel("TP3",Black,White);
ColorPanel("TP4",Black,White);
ColorPanel("TP5",Black,White);
}
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)
{
buy_basket(USD);
sell_basket(USD_R);
ObjectSetInteger(0,button_USD_basket_buy,OBJPROP_STATE,0);
return;
}
if (sparam==button_USD_basket_sell)
{
sell_basket(USD);
buy_basket(USD_R);
ObjectSetInteger(0,button_USD_basket_sell,OBJPROP_STATE,0);
return;
}
if (sparam==button_AUD_basket_close)
{
close_cur_basket(AUD);
close_cur_basket(AUD_R);
ObjectSetInteger(0,button_AUD_basket_close,OBJPROP_STATE,0);
return;
}
if (sparam==button_CAD_basket_close)
{
close_cur_basket(CAD);
close_cur_basket(CAD_R);
ObjectSetInteger(0,button_CAD_basket_close,OBJPROP_STATE,0);
return;
}
if (sparam==button_CHF_basket_close)
{
close_cur_basket(CHF);
close_cur_basket(CHF_R);
ObjectSetInteger(0,button_CHF_basket_close,OBJPROP_STATE,0);
return;
}
if (sparam==button_EUR_basket_close)
{
close_cur_basket(EUR);
ObjectSetInteger(0,button_EUR_basket_close,OBJPROP_STATE,0);
return;
}
if (sparam==button_GBP_basket_close)
{
close_cur_basket(GBP);
close_cur_basket(GBP_R);
ObjectSetInteger(0,button_GBP_basket_close,OBJPROP_STATE,0);
return;
}
if (sparam==button_JPY_basket_close)
{
close_cur_basket(JPY_R);
ObjectSetInteger(0,button_JPY_basket_close,OBJPROP_STATE,0);
return;
}
if (sparam==button_NZD_basket_close)
{
close_cur_basket(NZD);
close_cur_basket(NZD_R);
ObjectSetInteger(0,button_NZD_basket_close,OBJPROP_STATE,0);
return;
}
if (sparam==button_USD_basket_close)
{
close_cur_basket(USD);
close_cur_basket(USD_R);
ObjectSetInteger(0,button_USD_basket_close,OBJPROP_STATE,0);
return;
}
if (sparam==button_reset_ea)
{
Reset_EA();
ObjectSetInteger(0,button_reset_ea,OBJPROP_STATE,0);
return;
}
if (sparam==button_close_basket_All)
{
ObjectSetString(0,button_close_basket_All,OBJPROP_TEXT,"Closing...");
close_basket(Magic_Number);
ObjectSetInteger(0,button_close_basket_All,OBJPROP_STATE,0);
ObjectSetString(0,button_close_basket_All,OBJPROP_TEXT,"Close All");
return;
}
if (sparam==button_close_basket_Prof)
{
ObjectSetString(0,button_close_basket_Prof,OBJPROP_TEXT,"Closing...");
close_profit();
ObjectSetInteger(0,button_close_basket_Prof,OBJPROP_STATE,0);
ObjectSetString(0,button_close_basket_Prof,OBJPROP_TEXT,"Close Profit");
return;
}
if (sparam==button_close_basket_Loss)
{
ObjectSetString(0,button_close_basket_Loss,OBJPROP_TEXT,"Closing...");
close_loss();
ObjectSetInteger(0,button_close_basket_Loss,OBJPROP_STATE,0);
ObjectSetString(0,button_close_basket_Loss,OBJPROP_TEXT,"Close Loss");
return;
}
if (StringFind(sparam,"BUY") >= 0)
{
int ind = StringToInteger(sparam);
ticket=OrderSend(TradePairs[ind],OP_BUY,lot,MarketInfo(TradePairs[ind],MODE_ASK),100,0,0,"Elise Trend ZUP",Magic_Number,0,Blue);
if (OrderSelect(ticket,SELECT_BY_TICKET) == true) {
if (Pipsl != 0.0)
stoploss=OrderOpenPrice() - Pipsl * pairinfo[ind].PairPip;
else
if (Adr1sl != 0.0)
stoploss=OrderOpenPrice() - ((adrvalues[ind].adr10/100)*Adr1sl) * pairinfo[ind].PairPip;
else
stoploss = 0.0;
if (Piptp != 0.0)
takeprofit=OrderOpenPrice() + Piptp * pairinfo[ind].PairPip;
else
if (Adr1tp != 0.0)
takeprofit=OrderOpenPrice() + ((adrvalues[ind].adr10/100)*Adr1tp) * pairinfo[ind].PairPip;
else
takeprofit = 0.0;
OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(stoploss,MarketInfo(TradePairs[ind],MODE_DIGITS)),NormalizeDouble(takeprofit,MarketInfo(TradePairs[ind],MODE_DIGITS)),0,clrBlue);
}
ObjectSetInteger(0,ind+"BUY",OBJPROP_STATE,0);
ObjectSetString(0,ind+"BUY",OBJPROP_TEXT,"BUY");
return;
}
if (StringFind(sparam,"SELL") >= 0)
{
int ind = StringToInteger(sparam);
ticket=OrderSend(TradePairs[ind],OP_SELL,lot,MarketInfo(TradePairs[ind],MODE_BID),100,0,0,"Elise Trend ZUP",Magic_Number,0,Red);
if (OrderSelect(ticket,SELECT_BY_TICKET) == true) {
if (Pipsl != 0.0)
stoploss=OrderOpenPrice() + Pipsl * pairinfo[ind].PairPip;
else
if (Adr1sl != 0.0)
stoploss=OrderOpenPrice()+((adrvalues[ind].adr10/100)*Adr1sl) *pairinfo[ind].PairPip;
else
stoploss = 0.0;
if (Piptp != 0.0)
takeprofit=OrderOpenPrice() - Piptp * pairinfo[ind].PairPip;
else
if (Adr1tp != 0.0)
takeprofit=OrderOpenPrice() - ((adrvalues[ind].adr10/100)*Adr1tp) * pairinfo[ind].PairPip;
Показано первые 50% кода (символов: 48055)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.