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

SMART BOT SYSTEMS

anubis_sar_macd_v6.mq4

Похожие материалы по тегам

2 to 1 strategy with signals.pineTradingView · 3 общих теговfresh algo signals & overlays v25_6334471093901859175.pineTradingView · 3 общих теговfresh algo v24 tradingview indicator_5918156155804195406.pineTradingView · 3 общих теговtrading criteria.mq4MQL4 / MetaTrader 4 · 3 общих теговthe predator.mq4MQL4 / MetaTrader 4 · 3 общих теговrisk reward ratio.mq4MQL4 / MetaTrader 4 · 3 общих тегов
Вы автор или правообладатель?

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

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

О программе

anubis_sar_macd_v6.mq4 — торговый советник для MetaTrader 4, реализованный на MQL4. Он работает на текущем символе, обрабатывает тики и таймерные события, использует рыночные данные и технические индикаторы для принятия торговых решений. В коде присутствует проверка номера счёта, при несоответствии работа советника блокируется и выводится комментарий.

Советник поддерживает торговлю в обе стороны (Buy и Sell), усреднение серии ордеров с настраиваемым шагом, управление лотом через риск или фиксированный начальный лот, а также несколько режимов трейлинга и безубытка. Реализованы функции перекрытия и частичного закрытия ордеров, сопровождение виртуальными стоп-ордерами и расширение шага после заданного колена.

Для расчёта сигналов используются индикаторы Parabolic SAR, скользящие средние и MACD, а также опциональный фильтр RSI. Настройки вынесены во входные параметры, включая отладочный вывод, графическую панель, управление сериями, риск-менеджмент, трейлинг, безубыток, перекрытие и параметры сигналов. Советник содержит вспомогательные функции для отрисовки объектов на графике, работы с историей ордеров и форматирования данных.

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

НастройкаОписание
. (v1) Параметры индикации — Разделитель для параметров индикации.
Принты журнала (Debug) Принты журнала — Включает вывод отладочных сообщений в журнал.
Грфические объекты (InfoChart) Грфические объекты — Включает отображение графических объектов на графике.
Координата X панели (x_axis) Координата X панели — Координата X для размещения панели.
Координата Y панели (y_axis) Координата Y панели — Координата Y для размещения панели.
. (v1_) Параметры индикации — Разделитель для параметров индикации.
. (v2) Дополнительные параметры — Разделитель для дополнительных параметров.
Торговать Buy (TradeBuy) Торговать Buy — Разрешает торговлю на покупку.
Торговать Sell (TradeSell) Торговать Sell — Разрешает торговлю на продажу.
Открытие колен на новом баре (UseNewBar) Открытие колен на новом баре — Включает открытие колен на новом баре.
Открытие колен по заданному тайм-фрейму (UNB_TF) Открытие колен по заданному тайм-фрейму — Таймфрейм для открытия колен.
Префикс в названиях валютных пар. (Prefix) Префикс в названиях валютных пар. — Префикс в названиях валютных пар.
Максимальное значение спреда (SpreadMax) Максимальное значение спреда — Максимально допустимое значение спреда.
Магик номер (MagicNumber) Магик номер — Магический номер для идентификации ордеров советника.
Серия после которой закрывается первый ордер (FirstClose) Серия после которой закрывается первый ордер — Номер серии, после которой закрывается первый ордер.
. (v2__) Дополнительные параметры — Разделитель для дополнительных параметров.
. (v3) Установки риска и ММ — Разделитель для установок риска и ММ.
Risk если 0 то DefaultLot (Risk) Risk если 0 то DefaultLot — Риск; если 0, используется DefaultLot.
Во сколько раз макс.лот в серии больше стартового (Kf_MaxLot) Во сколько раз макс.лот в серии больше стартового — Во сколько раз максимальный лот в серии больше стартового.
Макс.лот если=0 -Kf_MaxLot (MaxLot) Макс.лот если=0 -Kf_MaxLot — Максимальный лот; если 0, используется Kf_MaxLot.
Начальный лот,если Risk=0 (DefaultLot) Начальный лот,если Risk=0 — Начальный лот, используемый при Risk=0.
Макс кол-во ордеров в серии (MaxTrades) Макс кол-во ордеров в серии — Максимальное количество ордеров в серии.
. (v3_) Установки риска и ММ — Разделитель для установок риска и ММ.
. (v4) Установки лот экспоненты — Разделитель для установок лот экспоненты.
Тип лот экспоненты (TypeLotExp) Тип лот экспоненты — Тип экспоненты для расчёта лота.
Коэффициент увеличения лота (LotExponent) Коэффициент увеличения лота — Коэффициент увеличения лота для серии ордеров.
. (v4_) Установки лот экспоненты — Разделитель для установок лот экспоненты.
. (v5) Установки трейлинга и БУ — Разделитель для установок трейлинга и БУ.
Выбор трейлинга (TypeTrailing) Выбор трейлинга — Выбор режима трейлинга.
. (v5_0) Стандартный трейлинг — Разделитель для стандартного трейлинг стопа.
. (v5_1) Стандартный трейлинг — Разделитель для стандартного трейлинг стопа.
Уровень прибыли для включения трейлинга (TrailingStart) Уровень прибыли для включения трейлинга — Уровень прибыли в пунктах для включения трейлинга.
Уровень трейлинга (расстояние от текущей цены) (TrailingStop) Уровень трейлинга (расстояние от текущей цены) — Расстояние трейлинга от текущей цены в пунктах.
Шаг трейлинга (TrailStep) Шаг трейлинга — Шаг трейлинга в пунктах.
. (v5_2) Трейлинг по барам — Разделитель для трейлинг стопа по барам.
Таймфрейм баров (BarsTF) Таймфрейм баров — Таймфрейм, используемый для трейлинга по барам.
Кол-во баров отступа для SL-БУ (BarsUse) Кол-во баров отступа для SL-БУ — Количество баров отступа для расчёта стоп-лосса и безубытка.
Кол-во пунктов отступа от экстримума (BarsOtstup_) Кол-во пунктов отступа от экстримума — Количество пунктов отступа от экстремума для расчёта стоп-лосса.
. (v5_3) Безубыток — Разделитель для безубытка.
Использовать безубыток (BuSeries) Использовать безубыток — Включает использование безубытка для серии ордеров.
Профит в пунктах для установки БУ (BUstart) Профит в пунктах для установки БУ — Профит в пунктах, при котором активируется безубыток.
Уровень безубытка в пунктах (BUsize) Уровень безубытка в пунктах — Уровень безубытка в пунктах.
. (v5_) Установки трейлинга и БУ — Разделитель для установок трейлинга и БУ.
. (v6) Установки LastTral — Разделитель для установок ласт трала откусывателя.
№ ордера который кусаем - 0 откл (LevelPartClose) № ордера который кусаем - 0 откл — Номер ордера, который подвергается частичному закрытию; 0 — отключено.
№ колена,начала работы LastTral - 0 откл (StartOrdLastTral) № колена,начала работы LastTral - 0 откл — Номер колена, с которого начинается работа LastTral; 0 — отключено.
. (v6_) Установки LastTral — Разделитель для установок ласт трала откусывателя.
. (v7) Установки перекрытия — Разделитель для установок перекрытия ордеров.
Перекрытие ордеров (TypeOverlap) Перекрытие ордеров — Включает перекрытие ордеров.
Маржа для вкл перекрытия если оно отключено (MargTypeOverlap) Маржа для вкл перекрытия если оно отключено — Уровень маржи для включения перекрытия ордеров, если оно отключено.
Частичное перекрытие (PartOverlap) Частичное перекрытие — Включает частичное перекрытие ордеров.
Маржа для вкл част-го перекрытия если оно отключено (MargPartOverlap) Маржа для вкл част-го перекрытия если оно отключено — Уровень маржи для включения частичного перекрытия, если оно отключено.
. (v7_) Установки перекрытия — Разделитель для установок перекрытия ордеров.
. (v8) Параметры входа — Разделитель для параметров входа и сопровождения.
Шаг открытия колен (PipStep) Шаг открытия колен — Шаг в пунктах для открытия следующего колена серии.
Сопровождение виртуальными стоп ордерами (Stop_order) Сопровождение виртуальными стоп ордерами — Включает сопровождение виртуальными стоп-ордерами.
Начало трала отложенного ордера (TralStartPend) Начало трала отложенного ордера — Начало трала отложенного ордера.
Шаг трала отложенного ордера (TralSizePend) Шаг трала отложенного ордера — Шаг трала отложенного ордера.
Тип сигнала на усреднение (TypeUsr) Тип сигнала на усреднение — Тип сигнала на усреднение.
Тип сигнала на вход (Type_Trade) Тип сигнала на вход — Тип сигнала на вход.
. (st) Параметры расширения шага — Разделитель для параметров расширения шага.
Колено после которого расширяется шаг (StartDynStep) Колено после которого расширяется шаг — Колено, после которого шаг начинает расширяться.
Сколько добавлять к ПипСтепу (PipStepInc) Сколько добавлять к ПипСтепу — Величина, добавляемая к шагу после расширения.
. (v8_) Параметры входа — Разделитель для параметров входа и сопровождения.
. (v9) Параметры сигналов — Разделитель для параметров расчёта сигнальщиков.
Использовать RSI фильтр (RSI_filtr) Использовать RSI фильтр — Включает использование фильтра RSI.
Уровень buy (LevelBuy) Уровень buy — Уровень RSI для сигнала на покупку.
Уровень sell (LevelSell) Уровень sell — Уровень RSI для сигнала на продажу.
. (v9_) Параметры сигналов — Разделитель для параметров расчёта сигнальщиков.
Таймфрейм сигнальщиков (TFsig) Таймфрейм сигнальщиков — Таймфрейм для расчёта сигналов.
p_s Настройки Parabolic SAR — Разделитель для настроек Parabolic SAR.
Коэффициент ускорения (Sar_step) Коэффициент ускорения — Коэффициент ускорения для Parabolic SAR.
Максимальный шаг (Sar_maximum) Максимальный шаг — Максимальный шаг для Parabolic SAR.
ma Настройки iMA — Разделитель для настроек iMA.
Быстрая Ма (iMAperiod) Быстрая Ма — Период быстрой скользящей средней.
Медленная Ма (iMAperiod2) Медленная Ма — Период медленной скользящей средней.
md Настройки MACD — Разделитель для настроек MACD.
Период быстрой средней (Fast_ema) Период быстрой средней — Период быстрой экспоненциальной средней для MACD.
Период медленной средней (Slow_ema) Период медленной средней — Период медленной экспоненциальной средней для MACD.
Период сигнальной линии (Signal_ema) Период сигнальной линии — Период сигнальной линии MACD.
Получить полный код

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

#property version     "2.0"
#property description "Коммерческая версия торгового робота SMART BOT SYSTEMS"
#property description "Внимание! робот использует систему усреднений"
#property description "- Вывод прибыли по экстримумам баров"
#property description "- Перекрытие, частичное закрытие ордеров"
#property description "- Ласт откусыватель ордеров"

#property strict

   enum ENUM_YN {
      No  , // Нет
      Yes   // Да
   };

   enum ENUM_TF {

      eM1  = PERIOD_M1,      // 1 минута
      eM5  = PERIOD_M5,      // 5 минут
      eM15 = PERIOD_M15,     // 15 минут
      eM30 = PERIOD_M30,     // 30 минут
      eH1  = PERIOD_H1,      // 1 час
      eH4  = PERIOD_H4,      // 4 часа
      eD1  = PERIOD_D1,      // 1 день

    };

input string   v1                    =  "ПАРАМЕТРЫ ИНДИКАЦИИ";//.
input ENUM_YN  Debug                 =  Yes;           // Принты журнала
input ENUM_YN  InfoChart             =  Yes;           // Грфические объекты
input int      x_axis                =  5;              // Координата X панели
input int      y_axis                =  25;             // Координата Y панели
int            xDist1                =  300;            // Расстояние по горизонтали блока нехватки средств
int            FontChar              =  9;              // Размер шрифта под линиями
string  v1_1                         =   "Индикатор iProfit";//.
int           Percent=5;

int    OffsetY=18;

int    StepY=12;

int    X1Row=15;

int    X2Row=88;

int    X3Row=138;

int    X4Row=188;

int    X5Row=255;

color     ColorProfit        =    clrLime;
color     ColorLoss          =    clrDarkOrange;

input string   v1_=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

input string   v2                    =  "ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ";//.
input ENUM_YN  TradeBuy              =  Yes;     // Торговать Buy
input ENUM_YN  TradeSell             =  Yes;     // Торговать Sell
extern ENUM_YN UseNewBar             =  No;      // Открытие колен на новом баре
extern ENUM_TF UNB_TF                =  eM5;     // Открытие колен по заданному тайм-фрейму
input string   Prefix                =  "";      // Префикс в названиях валютных пар.
string         CommentOrd            =  "SBS"; // Комментарий к ордерам
int            PauseTrade            =  3;       // Время ожидания между торговыми командами в сек
input int      SpreadMax             =  10;      // Максимальное значение спреда
input int      MagicNumber           =  0;       // Магик номер
input int      FirstClose            =  8;       // Серия после которой закрывается первый ордер
sinput string  v2__=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

input string   v3                    =  "УСТАНОВКИ РИСКА И MМ";//.
input double   Risk                  =  1.0;     // Risk если 0 то DefaultLot
input double   Kf_MaxLot             =  1000;    // Во сколько раз макс.лот в серии больше стартового
input double   MaxLot                =  0.0;     // Макс.лот если=0 -Kf_MaxLot
input double   DefaultLot            =  0.01;    // Начальный лот,если Risk=0
input int      MaxTrades             =  10;      // Макс кол-во ордеров в серии
input string   v3_=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

input string   v4                    =  "УСТАНОВКИ ЛОТ ЭКСПОНЕНТЫ";//.
enum typeLotExp
{
FIX             ,  
DINAMIC         ,  
GEOMETRIY       ,  
ARIFMETIKA        
};
input typeLotExp TypeLotExp          =  FIX;     // Тип лот экспоненты   
input double   LotExponent           =  1.4;     // Коэффициент увеличения лота
input string   v4_=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

input string   v5                    = "УСТАНОВКИ ТРЕЙЛИНГА И БУ"; //.
enum typeTrail
{
TRALonPIPS, // Тралл по пунктам
TRALonBARS  // Тралл по барам
};
input typeTrail TypeTrailing         =  TRALonPIPS;// Выбор трейлинга
input string   v5_0=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.
input string   v5_1                  =  "Стандартный Трейлинг Стоп";//.
input int      TrailingStart         =  5;       // Уровень прибыли для включения трейлинга
input int      TrailingStop          =  4;       // Уровень трейлинга (расстояние от текущей цены)
input int      TrailStep             =  1;       // Шаг трейлинга 
input string   v5_2                  =  "Трейлинг Стоп по барам";//.
input ENUM_TF  BarsTF                =  eM5;     // Таймфрейм баров
input int      BarsUse               =  2;       // Кол-во баров отступа для SL-БУ
input int      BarsOtstup_           =  3;       // Кол-во пунктов отступа от экстримума
input string   v5_3                  =  "Безубыток";//.
input ENUM_YN  BuSeries              =  No;      // Использовать безубыток
input int      BUstart               =  8;       // Профит в пунктах для установки БУ
input int      BUsize                =  2;       // Уровень безубытка в пунктах
input string   v5_=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

sinput string  v6                    =  "УСТАНОВКИ ЛАСТ ТРАЛА ОТКУСЫВАТЕЛЯ";//.
input int      LevelPartClose        =  0;       // № ордера который кусаем - 0 откл                                                                                           
input int      StartOrdLastTral      =  0;       // № колена,начала работы LastTral - 0 откл
input string   v6_=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

input string   v7                    =  "УСТАНОВКИ ПЕРЕКРЫТИЯ ОРДЕРОВ";//.
input ENUM_YN  TypeOverlap           =  No;   // Перекрытие ордеров
input int      MargTypeOverlap       =  600;  // Маржа для вкл перекрытия если оно отключено
input ENUM_YN  PartOverlap           =  No;   // Частичное перекрытие
input int      MargPartOverlap       =  600;  // Маржа для вкл част-го перекрытия если оно отключено
int      LeadingOrder          =  4;       // № колена вкл основного и частичного перекрытия
int      ProfitPersent         =  30;      // Процент перекрытия(10...50)
double   MultOver              =  1.4;     // Множитель % перекрытия когда подключается предпоследний ордер
int      OverTralStart         =  8;       // Начало трала перекрытия ордеров
int      OverTralSize          =  5;       // Шаг изменения трала 
input string   v7_=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

input string   v8                    =  "ПАРАМЕТРЫ ВХОДА - СОПРОВОЖДЕНИЯ";//.
input int      PipStep               =  20;      // Шаг открытия колен
extern ENUM_YN Stop_order            =  No;      // Сопровождение виртуальными стоп ордерами
input int      TralStartPend         =  5;       // Начало трала отложенного ордера
input int      TralSizePend          =  3;       // Шаг трала отложенного ордера
enum typesig
{
no_signal             , // Через PipStep
yes_signal              // По сигналу 
};
input typesig  TypeUsr               =  yes_signal;      // Тип сигнала на усреднение 
enum typetrade
{
no_type             , // Без индикатора
yes_type              // По сигналу 
};
input typetrade Type_Trade           =  yes_type;        // Тип сигнала на вход

input string   st                    =  "Параметры расширения шага";//.
extern int     StartDynStep          =  4;         // Колено после которого расширяется шаг
extern int     PipStepInc            =  10;        // Сколько добавлять к ПипСтепу
sinput string  v8_=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

input string   v9                    =  "ПАРАМЕТРЫ РАСЧЕТА СИГНАЛЬЩИКОВ";//.
input ENUM_YN  RSI_filtr             =  No;        // Использовать RSI фильтр
input int      LevelBuy              =  30;        // Уровень buy
input int      LevelSell             =  60;        // Уровень sell

sinput string  v9_=":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";//.

input ENUM_TF  TFsig                 =  eM5;       // Таймфрейм сигнальщиков
input  string  p_s                   =  "Parabolic SAR настройки";
input  double  Sar_step              =  0.08;      // Коэффициент ускорения
input  double  Sar_maximum           =  0.1;       // Максимальный шаг
input  string  ma                    =  "iMA настройки";
input  int     iMAperiod             =  12;        // Быстрая Ма
input  int     iMAperiod2            =  40;        // Медленная Ма
input  string  md                    =  "MACD настройки";
input  int     Fast_ema              =  12;        // Период быстрой средней
input  int     Slow_ema              =  34;        // Период медленной средней
input  int     Signal_ema            =  9;         // Период сигнальной линии 

int      TicketB[],        TicketS[],       Typeoverlap,     BarsOtstup,      margpartoverlap, 
         margtypeoverlap,  Delta2,          Session,dig,     Lpos[],          totalsell,        
         slip,             Cpos[],          totalord,        totalbuy,        levels,
         debug,            infoChart,       showProboy,      showOtboy,
         pipstep,          leadingorder,    overlap,         overtralstart,   sum,
         FirstTicketBuy,   FirstTicketSell, overtralsize,    LastTicketBuy,   LastTicketSell,
         cu=1,             ticketbuy,       ticketsell,      tralstartpend,   tralsizepend,
         PLastTicketBuy,   PLastTicketSell, bs,cbs,          trailingStart,   trailingStop,
         trailStep,        imaperiod,       fast_ema,        slow_ema,        signal_ema,
         imaperiod2,       PipStepBuy,       PipStepSell,     pipStepInc;

double   pips,ZeroLine,    Cprofit[],       Lprofit[],       Lprofit1,        CurrentDrawdown,
         CurrentMargLevel, SumProfit,       SumLotBuy,       SumLotSell,      spreadmax,            
         Lot,              Sum_lot,         Sumlot,          minLot,          maxLot,                                  
         TV,               DrawDownRate,    FreeMargin,      Balance,         Sredstva,              
         Step,             LastSLBuy,       LastSLSell,      spr,             freez,stlev,           
         ProfitBuy,        ProfitSell,      LastLotBuy,      LastLotSell,     LastPriceBuy,          
         FirstPriceBuy,    FirstPriceSell,  maxlot,          PrOver,          BSPrice,SSPrice,
         delta2,           One_Lot,         defaultlot,      LastPriceSell,   LastProfitSell,
         FirstProfitBuy,   FirstProfitSell, FirstLotBuy,     FirstLotSell,    LastProfitBuy,         
         PLastLotBuy,      PLastLotSell,    PLastProfitBuy,  PLastProfitSell, Llot[],Clot[],   
         Cprofit1,         Cprofit2,        bUstart,         bUsize,          sar_step,sar_maximum;

color    col,              ColOver0,        ColOver1;         
string   comment,          Symb,            Typetral="";
bool     NoTrade,          InitFail,     
         spreadON,         flag,            flag1,           Partoverlap,     result;

datetime NewBar_B,         NewBar_S;

static double   Zone_High,  Zone_Low,  ZeroZone,  BuyZone,  SellZone,   delta;
static datetime CurrentBar;
string level;

color ProfitColor,ProfitColor2,ProfitColor3,LotColor,
      LotColor1,OrdColor,OrdColor1,Coldelta;

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

void OnDeinit(const int res)
  { 
     ObjectsDeleteAll();
     EventKillTimer(); //кил таймера
  }

void OnTimer() {  
     MainIndication();
     ProfitLot();
}  

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

string fun2(string strA, string strB)
{
string res,vr1,vr2;

vr1=StringConcatenate(strA,strB);
vr2=StringConcatenate(strB,strA);

if(Prefix!="")
   {
   vr1=StringConcatenate(vr1,Prefix);
   vr2=StringConcatenate(vr2,Prefix);
   }
if(MarketInfo(vr1,MODE_BID)>0) res=vr1;
else if(MarketInfo(vr2,MODE_BID)>0) res=vr2;

return(res);
} 

int EA_SIGNAL()
 { 

   int signal = 0;

      double close0 = iClose(Symb,0,0);
      double close1 = iClose(Symb,0,1);

      double Rsi0   = iRSI(Symb,0,14,PRICE_CLOSE,0);
      double Rsi1   = iRSI(Symb,0,14,PRICE_CLOSE,1);

      double isar_0 = iSAR(Symb, TFsig, sar_step, sar_maximum, 0);
      double isar_1 = iSAR(Symb, TFsig, sar_step, sar_maximum, 1);

      double imacd_M0 = iMACD(Symb, TFsig, fast_ema, slow_ema, signal_ema, PRICE_CLOSE, MODE_MAIN, 0);
      double imacd_24 = iMACD(Symb, TFsig, fast_ema, slow_ema, signal_ema, PRICE_CLOSE, MODE_MAIN, 1);

      double imacd_S0 = iMACD(Symb, TFsig, fast_ema, slow_ema, signal_ema, PRICE_CLOSE, MODE_SIGNAL, 0);
      double imacd_S1 = iMACD(Symb, TFsig, fast_ema, slow_ema, signal_ema, PRICE_CLOSE, MODE_SIGNAL, 1);

      double ima_0 = iMA(Symb, TFsig, imaperiod, 0, MODE_EMA, PRICE_CLOSE, 0);
      double ima_1 = iMA(Symb, TFsig, imaperiod, 0, MODE_EMA, PRICE_CLOSE, 1);

      double ima2_0 = iMA(Symb, TFsig, imaperiod2, 0, MODE_EMA, PRICE_CLOSE, 0);
      double ima2_1 = iMA(Symb, TFsig, imaperiod2, 0, MODE_EMA, PRICE_CLOSE, 1);

if ((!RSI_filtr || (Rsi1 < LevelBuy))&&ima_1 > ima2_1 && ima_0 > isar_0 && ima_1 < isar_1 && imacd_M0 > imacd_S0 )  signal = 1;

if ((!RSI_filtr || (Rsi1 > LevelSell)) && ima_1 < ima2_1 && ima_0 < isar_0 && ima_1 > isar_1 && imacd_M0 < imacd_S0 ) signal = 2;  

  return(signal);
  }

void TrailingStairs()
{
if(!TypeTrailing == TRALonPIPS) return;
double PriceBEBuy =PriceBE(OP_BUY);
double PriceBESell=PriceBE(OP_SELL);
int    BuyOrders  =OrdExist(OP_BUY);
int    SellOrders =OrdExist(OP_SELL);
if (BuyOrders>0||SellOrders>0)
   {
   for(int i=0; i<=OrdersTotal(); i++)
      {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (OrderMagicNumber()!=MagicNumber||OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_BUY)
         {
         if((Bid-trailingStart*Point>PriceBEBuy)&&((OrderStopLoss()!=0&&Bid-trailingStop*Point>OrderStopLoss()+trailStep*Point)||OrderStopLoss()==0))
            {
            if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-trailingStop*Point,Digits),OrderTakeProfit(),0,clrGreen)) 
            { 
            if(debug)
            Print("Ошибка стандартного трейлинг стопа!",OrderTicket(),". Ошибка: ",GetLastError());}            
            else 
            if(debug)
            {Print("Модификация стандартный трейлинг стоп");}
            }
         }
      if (OrderType()==OP_SELL)
         {
         if((Ask+trailingStart*Point<PriceBESell)&&((OrderStopLoss()!=0&&Ask+trailingStop*Point<OrderStopLoss()-trailStep*Point)||OrderStopLoss()==0))
            {
            if(!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+trailingStop*Point,Digits),OrderTakeProfit(),0,clrGreen)) 
            {
            if(debug)
            Print("Ошибка стандартного трейлинг стопа!",OrderTicket(),". Ошибка: ",GetLastError());}           
            else 
            if(debug)
            {Print("Модификация стандартный трейлинг стоп");}
            }
         }
      }
   }
return;
}

void TrailingByShadows()
   { 
   if(!TypeTrailing == TRALonBARS) return;
   double PriceBUBuy    = PriceBE(OP_BUY);
   double PriceBUSell   = PriceBE(OP_SELL);
   double PriceBUBuy_   = PriceBUBuy  + bUstart*Point;
   double PriceBUSell_  = PriceBUSell - bUstart*Point;
   double extremum_Buy  = 0;
   double extremum_Sell = 0;

   for (int j=0; j<OrdersTotal(); j++)
   {
   if (!OrderSelect(j,SELECT_BY_POS,MODE_TRADES))continue; //   break; смена
   if(OrderMagicNumber() != MagicNumber || OrderSymbol()!=Symb)continue; // break;   смена

   if ((BarsUse < 1) || (BarsOtstup<=0)) 
      {
      if(debug)
      Print("Ошибка трейлинга функции по барам, BarsUse не может быть меньше 1 ");

      } 

   if (OrderType()==OP_BUY)
      {
       for(int i = 1; i <= BarsUse; i++)
         {
         if (i==1) extremum_Buy = iLow(Symb,BarsTF,i);
         else 
         if (extremum_Buy > iLow(Symb,BarsTF,i)) extremum_Buy = iLow(Symb,BarsTF,i);
         }  
   if (!BuSeries)
      {         
         if (((NormalizeDouble(extremum_Buy - (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits)> OrderStopLoss()) || (OrderStopLoss()==0)) && 
            (NormalizeDouble(extremum_Buy - (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits) > PriceBUBuy) && 
            (NormalizeDouble(extremum_Buy - (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits) < NormalizeDouble(Bid - MarketInfo(Symb,MODE_STOPLEVEL)*Point,Digits)))
         if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(extremum_Buy-(BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits),OrderTakeProfit(),OrderExpiration()))        
        {
         if(debug)
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());}
         else 
         if(debug)
         {Print(" Ордер модифицирован Trailing stop Bar");}       
         }
       else 
        {     
         if (((NormalizeDouble(extremum_Buy - (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits)> OrderStopLoss()) || (OrderStopLoss()==0)) && 
            (NormalizeDouble(extremum_Buy - (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits) > PriceBUBuy_) && 
            (NormalizeDouble(extremum_Buy - (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits) < NormalizeDouble(Bid - MarketInfo(Symb,MODE_STOPLEVEL)*Point,Digits)))
         if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(extremum_Buy-(BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits),OrderTakeProfit(),OrderExpiration()))

         {
         if(debug)
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());}
         else 
         if(debug)
         {Print(" Ордер модифицирован Trailing stop Bar");}

         }
       }

   if (OrderType()==OP_SELL)
      {
      for(int i = 1; i <= BarsUse; i++)
         {
         if (i==1) extremum_Sell = iHigh(Symb,BarsTF,i);
         else 
         if (extremum_Sell < iHigh(Symb,BarsTF,i)) extremum_Sell = iHigh(Symb,BarsTF,i);
         } 
  if (!BuSeries)
      {        
         if (((NormalizeDouble(extremum_Sell + (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits)< OrderStopLoss()) || (OrderStopLoss()==0)) && 
         (NormalizeDouble(extremum_Sell + (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits) < PriceBUSell) && 
         (NormalizeDouble(extremum_Sell + (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits) > NormalizeDouble(Ask + MarketInfo(Symb,MODE_STOPLEVEL)*Point,Digits)))       
        if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(extremum_Sell +(BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits),OrderTakeProfit(),OrderExpiration()))      
         {
        if(debug)
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());}
         else 
        if(debug)
         {Print(" Ордер модифицирован Trailing stop Bar");}       
         }  
       else
       {        
         if (((NormalizeDouble(extremum_Sell + (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits)< OrderStopLoss()) || (OrderStopLoss()==0)) && 
         (NormalizeDouble(extremum_Sell + (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits) < PriceBUSell_) && 
         (NormalizeDouble(extremum_Sell + (BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits) > NormalizeDouble(Ask + MarketInfo(Symb,MODE_STOPLEVEL)*Point,Digits)))       
        if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(extremum_Sell +(BarsOtstup + MarketInfo(Symb,MODE_SPREAD))*Point,Digits),OrderTakeProfit(),OrderExpiration()))      
         {
        if(debug)
         Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());}
         else 
        if(debug)
         {Print(" Ордер модифицирован Trailing stop Bar");}       
         }                
      }  
   }
} 

void MoveToWL() {
   if (bUstart < stlev) bUstart = stlev;
   double PriceBUBuy = PriceBE(OP_BUY), PriceBUSell = PriceBE(OP_SELL);
   bool omodif = false;
   for (int i = 0; i <= OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS) == TRUE) {
         if (bUstart > 0 && OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && (OrderStopLoss() == 0 || NormalizeDouble(OrderStopLoss()-PriceBUBuy,Digits) < NormalizeDouble(bUsize * Point,Digits))) {
            if (NormalizeDouble(MarketInfo(Symbol(), MODE_BID) - (PriceBUBuy + (OrderCommission()/OrderLots() * Point)),Digits) > NormalizeDouble(bUstart * Point,Digits)) {
              omodif= OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(PriceBUBuy + ((bUsize + OrderCommission()/OrderLots())* Point),Digits), OrderTakeProfit(), 0, clrRed);

        if(debug){
         Print("Ордер #",OrderTicket(),". модифицирован в Безубыток ");}
         else
         if(debug){
         Print("Модификация ордера #",OrderTicket(),". Ошибка: ",GetLastError());}

            }
         }
      }
      if (OrderSelect(i, SELECT_BY_POS) == TRUE) {
         if (bUstart > 0 && OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && (OrderStopLoss() == 0 || NormalizeDouble(PriceBUSell-OrderStopLoss(),Digits) < NormalizeDouble(bUsize * Point,Digits))) {
            if (NormalizeDouble(PriceBUSell - (MarketInfo(Symbol(), MODE_ASK) + (OrderCommission()/OrderLots()* Point)),Digits) > NormalizeDouble(bUstart * Point,Digits)) {
             omodif=  OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(PriceBUSell - ((bUsize + OrderCommission()/OrderLots())* Point),Digits), OrderTakeProfit(), 0, clrGreen);
        if(debug){
         Print("Ордер #",OrderTicket(),". модифицирован в Безубыток ");}
         else
         if(debug){
         Print("Модификация ордера #",OrderTicket(),". Ошибка: ",GetLastError());}

            }
         }
      }
   }
}	 

double PriceBE(int dir)
   {  
   double BEPrice   =0;
   double MyBEPrice =0;
   double BuyLots   =0;
   double SellLots  =0;
   double BuyProfit =0;
   double SellProfit=0;
   double BuyLevel  =0;
   double SellLevel =0;
   double tp =0;
   if(OrdExist(OP_BUY)>0||OrdExist(OP_SELL)>0)
      {
      for(int i=OrdersTotal(); i>=0; i--)
         {
         if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
         if(OrderMagicNumber() != MagicNumber || OrderSymbol()!=Symb ) continue;
         if(OrderType()==OP_BUY)  
            {
             BuyLots=BuyLots+OrderLots();
             BuyProfit=BuyProfit+OrderProfit()+OrderCommission()+OrderSwap();

            }
         if(OrderType()==OP_SELL)  
            {
             SellLots=SellLots+OrderLots();
             SellProfit=SellProfit+OrderProfit()+OrderCommission()+OrderSwap();
            }
         }
      }
   double TickValue=MarketInfo(Symbol(),MODE_TICKVALUE);
   if (BuyLots>0 )           BuyLevel=NormalizeDouble(Bid-(BuyProfit/(TickValue*BuyLots)*Point),Digits); else BuyLevel=0;
   if (SellLots>0 )          SellLevel=NormalizeDouble(Ask+(SellProfit/(TickValue*SellLots)*Point),Digits); else SellLevel=0;
   if ((BuyLots-SellLots)>0) BEPrice=NormalizeDouble(Bid-((BuyProfit+SellProfit)/(TickValue*(BuyLots-SellLots))*Point),Digits);
   if ((SellLots-BuyLots)>0) BEPrice=NormalizeDouble(Ask+((BuyProfit+SellProfit)/(TickValue*(SellLots-BuyLots))*Point),Digits);
   if(dir==OP_BUY)   MyBEPrice=BuyLevel;
   if(dir==OP_SELL)  MyBEPrice=SellLevel;
   if(dir==-1)       MyBEPrice=BEPrice;

   return(NormalizeDouble(MyBEPrice,Digits));
   }

int OrdExist(int direction)
{
int OrdCount=0;
if (OrdersTotal()>0)
   {
   for(int i=0; i<=OrdersTotal(); i++)
      {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderMagicNumber() != MagicNumber || OrderSymbol()!=Symb) continue;
      if (OrderType()==direction) OrdCount++;
      }
   }
return (OrdCount);
}

int CurrentCondition()
  {

   totalbuy=0; totalsell=0; //totalbs=0; totalss=0;totalbl=0; totalsl=0;  

   int n=OrdersTotal(),i,r,j;
   ArrayResize(TicketB,n);
   ArrayResize(TicketS,n);

   for(r=0;r<n;r++)
     {
      if(OrderSelect(r,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symb)
           {
            if(OrderMagicNumber()==MagicNumber)
              {
               switch(OrderType())
                 {
                  case OP_BUY       : TicketB[totalbuy] =OrderTicket(); totalbuy++;  break;
                  case OP_SELL      : TicketS[totalsell]=OrderTicket(); totalsell++; break;

                 }
              }           
           }
        }
      else {Print("Сбой, при переборе ордеров, производится новый расчет");  return(0);}
     }
   ArrayResize(TicketS,totalsell);
   ArrayResize(TicketB,totalbuy);

   totalord=totalbuy+totalsell;

   double pr1,pr2,pr3;

   for(i=0;i<totalbuy-1;i++)
     {
      if(OrderSelect(TicketB[i],SELECT_BY_TICKET))
        {
         pr1=OrderOpenPrice(); pr3=pr1; r=i;
         for(j=i+1;j<totalbuy;j++)
           {
            if(OrderSelect(TicketB[j],SELECT_BY_TICKET))
              {
               pr2=OrderOpenPrice();
               if(pr2<pr3) {pr3=pr2;r=j;}
              }
           }
         if(r!=i) {j=TicketB[i];TicketB[i]=TicketB[r];TicketB[r]=j;}
        }
     }

/*
   for(i=0;i<totalbs-1;i++)
     {
      if(OrderSelect(TicketBS[i],SELECT_BY_TICKET))
        {
         pr1=OrderOpenPrice(); pr3=pr1; r=i;
         for(j=i+1;j<totalbs;j++)
           {
            if(OrderSelect(TicketBS[j],SELECT_BY_TICKET))
              {
               pr2=OrderOpenPrice();
               if(pr2<pr3) {pr3=pr2;r=j;}
              }
           }
         if(r!=i) {j=TicketBS[i];TicketBS[i]=TicketBS[r];TicketBS[r]=j;}
        }
     }

   for(i=0;i<totalbl-1;i++)
     {
      if(OrderSelect(TicketBL[i],SELECT_BY_TICKET))
        {
         pr1=OrderOpenPrice(); pr3=pr1; r=i;
         for(j=i+1;j<totalbl;j++)
           {
            if(OrderSelect(TicketBL[j],SELECT_BY_TICKET))
              {
               pr2=OrderOpenPrice();
               if(pr2<pr3) {pr3=pr2;r=j;}
              }
           }
         if(r!=i) {j=TicketBL[i];TicketBL[i]=TicketBL[r];TicketBL[r]=j;}
        }
     }
 */    

   for(i=0;i<totalsell-1;i++)
     {
      if(OrderSelect(TicketS[i],SELECT_BY_TICKET))
        {
         pr1=OrderOpenPrice(); pr3=pr1; r=i;
         for(j=i+1;j<totalsell;j++)
           {
            if(OrderSelect(TicketS[j],SELECT_BY_TICKET))
              {
               pr2=OrderOpenPrice();
               if(pr2>pr3) {pr3=pr2;r=j;}
              }
           }
         if(r!=i) {j=TicketS[i];TicketS[i]=TicketS[r];TicketS[r]=j;}
        }
      } 

/*
   for(i=0;i<totalss-1;i++)
     {
      if(OrderSelect(TicketSS[i],SELECT_BY_TICKET))
        {
         pr1=OrderOpenPrice(); pr3=pr1; r=i;
         for(j=i+1;j<totalss;j++)
           {
            if(OrderSelect(TicketSS[j],SELECT_BY_TICKET))
              {
               pr2=OrderOpenPrice();
               if(pr2>pr3) {pr3=pr2;r=j;}
              }
           }
         if(r!=i) {j=TicketSS[i];TicketSS[i]=TicketSS[r];TicketSS[r]=j;}
        }
      }  

   for(i=0;i<totalsl-1;i++)
     {
      if(OrderSelect(TicketSL[i],SELECT_BY_TICKET))
        {
         pr1=OrderOpenPrice(); pr3=pr1; r=i;
         for(j=i+1;j<totalsl;j++)
           {
            if(OrderSelect(TicketSL[j],SELECT_BY_TICKET))
              {
               pr2=OrderOpenPrice();
               if(pr2>pr3) {pr3=pr2;r=j;}
              }
           }
         if(r!=i) {j=TicketSL[i];TicketSL[i]=TicketSL[r];TicketSL[r]=j;}
        } 
      }
 */     

   ProfitBuy=0;ProfitSell=0;LastPriceBuy=0;LastLotBuy=0;LastPriceSell=0;LastLotSell=0;FirstPriceSell=0;FirstTicketSell=0;
   SumLotBuy=0;SumLotSell=0;Lprofit1=0;FirstPriceBuy=0;FirstTicketBuy=0;LastSLBuy=0;LastSLSell=0;LastTicketSell=0;LastTicketBuy=0;
   FirstProfitBuy=0;FirstProfitSell=0;FirstLotBuy=0;FirstLotSell=0;LastProfitBuy=0;LastProfitSell=0;PLastLotBuy=0;PLastProfitBuy=0;
   PLastTicketBuy=0;PLastLotSell=0;PLastProfitSell=0;PLastTicketSell=0;Cprofit1=0;Cprofit2=0;
   bs=0;cbs=0; ArrayResize(Lprofit,totalord); ArrayResize(Llot,totalord); ArrayResize(Lpos,totalord);
   ArrayResize(Cprofit,totalord); ArrayResize(Clot,totalord); ArrayResize(Cpos,totalord);

   for(i=totalbuy-1;i>=0;i--)
     {
      if(OrderSelect(TicketB[i],SELECT_BY_TICKET))
        {
         LastLotBuy     = OrderLots();
         SumLotBuy     += LastLotBuy;
         LastProfitBuy  = OrderProfit()+OrderSwap()+OrderCommission();
         ProfitBuy     += LastProfitBuy;
         LastPriceBuy   = OrderOpenPrice();
         LastSLBuy      = OrderStopLoss();
         LastTicketBuy  = OrderTicket();

         if(i==totalbuy-1)
           {
            FirstLotBuy    =LastLotBuy;
            FirstPriceBuy  =LastPriceBuy;
            FirstTicketBuy=LastTicketBuy;                            //Тикет первого ордера Buy
            FirstProfitBuy=LastProfitBuy;
           }
         else if(i==LevelPartClose)
           {
            PLastLotBuy    =LastLotBuy;
            PLastProfitBuy =LastProfitBuy;
            PLastTicketBuy =LastTicketBuy;
           }

         if(Typeoverlap==1 && totalord>=leadingorder) //|| (Typeoverlap==2 && totalbuy >= leadingorder))
           {
            if(LastProfitBuy>0)
              {
               Lprofit[bs]=LastProfitBuy;
               Llot[bs]    = LastLotBuy;
               Lpos[bs]    = LastTicketBuy;
               Lprofit1+=Lprofit[bs];
               bs++;
              }
            else if(LastProfitBuy<0)
              {
               Cprofit[cbs]=LastProfitBuy;
               Clot[cbs]    = LastLotBuy;
               Cpos[cbs]    = LastTicketBuy;
               Cprofit1+=Cprofit[cbs];
               Cprofit2+=Cprofit[cbs]/Clot[cbs];
               cbs++;
              }
           }
        }
     }

   for(i=totalsell-1;i>=0;i--)
     {
      if(OrderSelect(TicketS[i],SELECT_BY_TICKET))
        {
         LastLotSell    = OrderLots();
         SumLotSell    += LastLotSell;
         LastProfitSell = OrderProfit()+OrderSwap()+OrderCommission();
         ProfitSell    += LastProfitSell;
         LastPriceSell  = OrderOpenPrice();
         LastSLSell     = OrderStopLoss();
         LastTicketSell = OrderTicket();

         if(i==totalsell-1)
           {
            FirstLotSell    =LastLotSell;
            FirstPriceSell  =LastPriceSell;
            FirstTicketSell=LastTicketSell;                           //Тикет первого ордера Sell
            FirstProfitSell=LastProfitSell;
           }
         else if(i==LevelPartClose)
           {
            PLastLotSell    =LastLotSell;
            PLastProfitSell =LastProfitSell;
            PLastTicketSell =LastTicketSell;
           }
         if(Typeoverlap==1 && totalord>=leadingorder) //|| (totalsell >= leadingorder && Typeoverlap ==2))
           {
            if(LastProfitSell>0)
              {
               Lprofit[bs]=LastProfitSell;
               Llot[bs]    = LastLotSell;
               Lpos[bs]    = LastTicketSell;
               Lprofit1+=Lprofit[bs];
               bs++;
              }
            else if(LastProfitSell<0)
              {
               Cprofit[cbs]=LastProfitSell;
               Clot[cbs]    = LastLotSell;
               Cpos[cbs]    = LastTicketSell;
               Cprofit1+=Cprofit[cbs];
               Cprofit2+=Cprofit[cbs]/Clot[cbs];
               cbs++;
              }
           }
        }
     }
   ArrayResize(Lprofit,bs);
   ArrayResize(Llot,bs);
   ArrayResize(Lpos,bs);
   ArrayResize(Cprofit,cbs);
   ArrayResize(Clot,cbs);
   ArrayResize(Cpos,cbs);
   if(Typeoverlap!=0)
     {
      for(i=0;i<bs-1;i++)
        {
         pr1=Lprofit[i]; pr3=pr1; r=i;
         for(j=i+1;j<bs;j++)
           {
            pr2=Lprofit[j];
            if(pr2>pr3) {pr3=pr2; r=j;}
           }
         if(r!=i)
           {
            j=Lpos[i];Lpos[i]=Lpos[r];Lpos[r]=j;
            double k=Llot[i];Llot[i]=Llot[r];Llot[r]=k;
            k=Lprofit[i];Lprofit[i]=Lprofit[r];Lprofit[r]=k;
           }
        }
      for(i=0;i<cbs-1;i++)
        {
         pr1=Cprofit[i]; pr3=pr1; r=i;
         for(j=i+1;j<cbs;j++)
           {
            pr2=Cprofit[j];
            if(pr2<pr3) {pr3=pr2; r=j;}
           }
         if(r!=i)
           {
            j=Cpos[i];Cpos[i]=Cpos[r];Cpos[r]=j;
            double k=Clot[i];Clot[i]=Clot[r];Clot[r]=k;
            k=Cprofit[i];Cprofit[i]=Cprofit[r];Cprofit[r]=k;
           }
        }
     }

   SumProfit       = NormalizeDouble(ProfitSell + ProfitBuy,2);
   CurrentDrawdown = NormalizeDouble(MathMax((AccountBalance()+AccountCredit()-AccountEquity())/(AccountBalance()+AccountCredit())*100,0),2);
   Sum_lot         = NormalizeDouble(SumLotBuy - SumLotSell ,dig);// Суммарный лот (плюс или минус)        
   Sumlot          = NormalizeDouble(MathAbs(Sum_lot     ),dig);  // Aбсолютное значение суммарного лота (значение по модулю, всегда плюс)
   if(Sumlot==0) Sumlot=0.00000001;                               // Защита от нулевого значения        
   if(AccountMargin()>0) CurrentMargLevel=NormalizeDouble(AccountEquity()/AccountMargin()*100,0);
   FreeMargin = NormalizeDouble(AccountFreeMargin(), 2);
   Balance    = NormalizeDouble(AccountBalance   (), 2);
   Sredstva   = NormalizeDouble(AccountEquity    ()       , 2);
   pips=NormalizeDouble((AccountEquity()-AccountStopoutLevel()*AccountEquity()/100.0)/Sumlot/TV,0);

   return(1);
  }

double NewLot(int OrdType)
  {
   double newlot=0,cp;

   switch(OrdType)
     {
      case OP_BUY :

         cp=MathAbs((LastPriceBuy-Ask)/Point/pipstep); 

         switch(TypeLotExp)
           {
            case 1 : newlot = NormalizeDouble(LastLotBuy *LotExponent*cp            ,dig); break; // Динамическая
            case 2 : newlot = NormalizeDouble(LastLotBuy *MathPow(LotExponent, cp)  ,dig); break; // Геометричесая
            case 3 : newlot = NormalizeDouble(LastLotBuy +Lot *LotExponent          ,dig); break; // Арифметическая          
            default: newlot = NormalizeDouble(LastLotBuy *LotExponent               ,dig); break; // FixLotЕхр 
           }
         break;
      case OP_SELL :

         cp=MathAbs((Bid-LastPriceSell)/Point/pipstep); 

         switch(TypeLotExp)
           {
            case 1 : newlot = NormalizeDouble(LastLotSell *LotExponent*cp           ,dig); break; // Динамическая
            case 2 : newlot = NormalizeDouble(LastLotSell *MathPow(LotExponent,cp)  ,dig); break; // Геометричесая
            case 3 : newlot = NormalizeDouble(LastLotSell +Lot *LotExponent         ,dig); break; // Арифметическая
            default: newlot = NormalizeDouble(LastLotSell *LotExponent              ,dig); break; // FixLotЕхр 
           }
         break;
     }
   if(maxlot==0) newlot=newlot; else
   if(newlot > maxlot)

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

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

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

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

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

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

Стоимость полного кода
7 502,10₽ ≈ $91.69