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

Elise-EA-ZUP

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

Стоимость полного кода
4 805,50₽ ≈ $58.74