Курсы валют
<a href="https://www.instaforex.com/ru/" target="blank">ИнстаФорекс портал"</a>
Новости от FOREXPF.RU
<a href="https://www.instaforex.com/ru/">Форекс портал</a>
Апрель 2018
Пн Вт Ср Чт Пт Сб Вс
« Июн    
 1
2345678
9101112131415
16171819202122
23242526272829
30  
При поддержке: деньги и фен шуй.

Изменения версий

Изменения версии 1.01. 2012 12 08 (суббота)

Show »

1. Изменены параметры по умолчанию
extern int MagicNumber = 10000;
extern string TradeComment = «FST»;
2. добавлены параметры:
extern color ColorText = Silver; Цвет основной индикации
extern int FontSize = 10; Размер шрифта индикации
3. добавил индикацию в правом нижнем углу основных параметров:
Indication («TradeComment»,3,5,55 , «» +txtTradeComment+»»,FontSize-2,»Tahoma»,ColorText);
Indication («MagicNumber»,3,5,40 , «» +txtMagicNumber+»»,FontSize-2,»Tahoma»,ColorText);
Indication («NextLots»,3,5,20 , «» +txtNextLots+»»,FontSize,»Tahoma»,ColorText);
Indication («OpenTrades»,3,5,5 , «» +txtOpenTrades+»»,FontSize,»Tahoma»,ColorText);

Изменения версии 1.02. 2012 12 08 (суббота)

Show »

1. добавлены комменты:
+ «Lots: » + DoubleToStr(Lots, 2)
+ «MLF: » + DoubleToStr(MultiLotsFactor, 2)
+ «Step: » + DoubleToStr(StepOrders, 0)
+ «TP: » + DoubleToStr(TakeProfit, 0)

Изменения версии 1.03. 2012 12 10 (понедельник)

Show »

1. Исправлены названия функций на адекватные

Изменения версии 1.04. 2012 12 15 (суббота)

Show »

1. Убран параметр extern double Lots = 0.1;- расчет размера лота ведется от риска (dblMinLot)
2. Добавлены параметры:
extern double MinRisk = 1; Риск в сделке на первом колене % от капитала (при ММ=1)
extern double MaxRisk = 15; Максимальный риск в сделке % от капитала (при ММ=1)
3. Добавлена функция double dblWorkLotByRisk() Размер лота
4. В функцию double fGetNextLot(int iTypeOrder) { добавлен код:
if (dblNextLot > dblMaxLot) dblNextLot = dblMaxLot;
5. В модуль Start() добавлен код:
dblMinLot = dblWorkLotByRisk(MinRisk);
dblMaxLot = dblWorkLotByRisk(MaxRisk);
6. Исправлен код при условии if (SafeEquityStopOut) { — убрал деление на 100
if (dblCalcProfit < 0.0 && MathAbs(dblCalcProfit) > SafeEquityRisk * fAccountEquity()) {
7. Добавлены комменты по углам экрана + настройки отображения комментов и цветов
8. Переименованы основные параметры
9. Добавлена индикация прибыли i-Profit
10. Вычищен весь код, убраны неиспользуемые куски, переименованы ВСЕ переменные и функции

Изменения версии 1.05. 2012 12 16 (воскресенье)

Show »

1. Вместо параметра extern int MagicNumber = 20000;
добавлено 2 параметра:
extern int MagicNumberLong = 20000;
extern int MagicNumberShort = 20001;
2. Все нужные переменные и функции продублированы: Long и Short

Изменения версии 1.06. 2012 12 17 (понедельник)

Show »

1. Комменты сделаны аналогично версии 1.05
2. Индикация Magic и TradeComment перенесена в правый верхний угол
3. TradeComment — локальная переменная, которая формируется от валютной пары и направления ( типа FST 1.06 GBPUSD Long 20000-0)
4. Magic и TradeComment в любом случае отображаются на экране, независимо от настроек индикации
5. Добавлены цвета отображения подписей реального и демо счета
extern color ColorDemo = LimeGreen; Цвет текста подписи демо-счета
extern color ColorReal = LimeGreen; Цвет текста подписи реального счета
6. Добавил индикацию цветом количества открытых ордеров, просадки/прибыли

Изменения версии 1.05. 2012 12 17 (понедельник)

Show »

6. Индикация одинаковая с версией 1.06
Возхвращен параметр extern int MagicNumber = 20000;
Убраны параметры extern int MagicNumberLong = 20000;
extern int MagicNumberShort = 20001;
Магик по коротким позициям = MagicNumber + 1

Изменения версии 1.06. 2012 12 17 (понедельник)

Show »

1. Добавил параметры
extern double Grid_Ariphmetic = 0;
extern double Grid_Multiplier = 0;
extern double Grid_Ratio = 0;
double Original_TP;
double Original_EP;

Изменения версии 1.05. и 1.06 2012 12 18 (вторник)

Show »

1. Добавил индикацию следующего шага в правом нижнем углу.

Изменения версии 1.07. 2012 12 18 (вторник)

Show »

1. Добавил параметры
extern int TimeFrame_Long = 240; Рабочий таймфрейм для сделок ветки Long
extern int TimeFrame_Short = 240; Рабочий таймфрейм для сделок ветки Short
2. Добавлен код: вместо текущего ТФ использовать TimeFrame_Long/TimeFrame_Short
iClosePreviousBar = iClose(Symbol(), TimeFrame_Long, 2);
iCloseNextBar = iClose(Symbol(), TimeFrame_Long, 1);
if (iClosePreviousBar > iCloseNextBar) {
iOrderTypeLong = OP_SELL; -1 — not Initialized, 0 — BUY, 1 — SELL 2012 12 18
} else {
iOrderTypeLong = OP_BUY; -1 — not Initialized, 0 — BUY, 1 — SELL 2012 12 18
}
3. Добавлена проваерка на сигнал — не открывать следующие колена, если сигнал не совпадает с направлением сделок
if ( iOrderTypeShort == OP_BUY && iCountWorkingOrdersShort > 3 ) Если сигнал по Short позициям не совпадает — следующее колено не открываем…)
{
Print(«Alert! iOrderTypeShort = OP_BUY ! Next Step not open » + iCountWorkingOrdersShort );
} else {
4. Добавлены переменные
int iMaxCountWorkingOrdersLong = 8; максимальное колено, после которого не открываются следующие, если сигнал не совпадает
int iMaxCountWorkingOrdersShort = 8; максимальное колено, после которого не открываются следующие, если сигнал не совпадает
5. Добавлен параметр
extern int MaxOrdersStopNextStep= 10; Максимальное колено, после которого не открываются следующие, если сигналы не совпадают

Изменения версии 1.07. 2012 12 19 (среда)

Show »

1. Добавлена индикация if ( MaxOrdersStopNextStep != MaxOrders ) txtMaxOrders = txtMaxOrders + » ( » + MaxOrdersStopNextStep + » Stop )»;
2. Убраны параметры
extern int TimeFrame_Long = 240; Рабочий таймфрейм для сделок ветки Long
extern int TimeFrame_Short = 240; Рабочий таймфрейм для сделок ветки Short
3. Добавлены параметры
extern int TimeFrame_Bars = 240; Рабочий таймфрейм для определения направления по ценам закрытия баров
iClose(Symbol(), TimeFrame_Bars, 2) > iClose(Symbol(), TimeFrame_Bars, 1) — SELL иначе — BUY
extern int TimeFrame_AC_AO = 240; Рабочий таймфрейм для для определения направления по индиаторам AC AO
5. Добавлены функции
bool CheckSignals_Bars() проверка сигнала по ценам закрытия баров
int IndAC(string Symbol(), int TimeFrame_, int Shift)
int IndAO(string Symbol(), int TimeFrame_, int Shift)
bool CheckSignals_AC_AO() проверка сигнала по индикаторам АС / АО
6. В модуль Init() — ТФ для контроля берутся с рабочего ТФ
TimeFrame_Bars = 0; текущий ТФ
TimeFrame_AC_AO = 0; текущий ТФ
7. Добавлены параметры:
extern int TimeFrame_MA = 240; Рабочий таймфрейм для определения направления по MA
extern int Period_MA1 = 21; Период расчётной МА1
extern int Period_MA2 = 55; Период расчётной МА2
extern int Period_MA3 = 200; Период расчётной МА3
8. Добавлены функции
int CheckMA() { Проверка пересечения МА
bool CheckSignals_MA() { Проверка сигнала пересечения МА
9. Новая доработка: изменение рисков (Для начала в 2 раза…)
Условие 1: Когда МА1 пересекает МА3 сверху вниз — повышаем риски для — игры в СЕЛ, снижаем риски для — игры в БАЙ
Условие 2: Когда МА1 пересекает МА3 снизу вверх — повышаем риски — игра в БАЙ, снижаем риски для — игры в СЕЛ
Добавлен параметр extern double RiskExponent = 3; Коэффициент увеличения риска по сигналам МА
Добавлены переменные
double MinRiskLong = 2; Риск в сделке на первом колене % от капитала (при ММ=1)
double MaxRiskLong = 15; Максимальный риск в сделке % от капитала (при ММ=1)
double MinRiskShort = 2; Риск в сделке на первом колене % от капитала (при ММ=1)
double MaxRiskShort = 15; Максимальный риск в сделке % от капитала (при ММ=1)
double RiskExponentLong = 1; Коэффициент увеличения риска по сигналам МА Long
double RiskExponentShort = 1; Коэффициент увеличения риска по сигналам МА Short

Изменения версии 1.07. 2012 12 20 (четверг)

Show »

1. Изменены параметры по умолчанию
2. Изменены комменты с учетом RiskExponent с выделением цветом повышенного риска
Indication («Risk» ,2,5,157 , «» +txtRisk+»»,FontSize,»Tahoma»,ColorText);
Indication («RiskLong» ,2,5,140 , «» +txtRiskLong+»»,FontSize,»Tahoma»,colRiskLong);
Indication («RiskShort» ,2,5,125 , «» +txtRiskShort+»»,FontSize,»Tahoma»,colRiskShort);
3. Добавлены параметры вместо RiskExponent
extern double MinRiskExponent = 2; Коэффициент увеличения минимального риска по сигналам МА
extern double MaxRiskExponent = 1.5; Коэффициент увеличения максимального риска по сигналам МА
4. Добавлены параметры:
extern bool UseSignal_MA = TRUE; использовать сигналы по МА
extern bool UseSignal_Bars = TRUE; использовать сигналы по ценам закрытия баров
extern bool UseSignal_AC_AO = FALSE; использовать сигналы по индикаторам AC AO
5. 20:44 Исправил ошибку, почему не на тех уровнях открывались позиции …
6. 20:55 Комменты перенес в конец модуля Start() — неправильно показывались следующий шаг и лот
7. Непонятно, что это такое dblNextLotLong = NormalizeDouble(dblMinLotLong * MathPow(MultiLotsFactor, iWorkStepLong), dblLotDecimal);
Output: 2 to the power of 3 is 8

Изменения версии 1.09. 2012 12 21 (пятница)

Show »

1. Изменены параметры по умолчанию
2. 11:40 Вынес в модуле Start() из условий проверок, для отображения в индикации следукющего колена
iCountWorkingOrdersLong = fCountWorkingOrdersLong();
iCountWorkingOrdersShort = fCountWorkingOrdersShort();
dblOpenPriceLong = fGetOrderOpenPriceLong();
dblNextLotLong = fGetNextLot(OP_BUY, dblMinLotLong, dblMaxLotLong, iWorkStepLong);
dblOpenPriceShort = fGetOrderOpenPriceShort();
dblNextLotShort = fGetNextLot(OP_SELL, dblMinLotShort, dblMaxLotShort, iWorkStepShort);
3. 14:04 Исправил расчет просадки
dblCurrent_drawdown = (AccountBalance()-AccountEquity())/(AccountBalance()+AccountCredit())*100;
4. Добавил индикацию AccountCredit();
5. Исправил, чтобы Ratio считалось со второго шага (а не с третьего — как было)
7. Исправил подсчет лота следующего колена — Вынес в модуле Start() из условий проверок
14:36 Вынес и поменял местами — мне кажется была ошибка в определении следующего лота …
iWorkStepLong = iCountWorkingOrdersLong;
dblNextLotLong = fGetNextLot(OP_BUY, dblMinLotLong, dblMaxLotLong, iWorkStepLong);
iWorkStepShort = iCountWorkingOrdersShort;
dblNextLotShort = fGetNextLot(OP_SELL, dblMinLotShort, dblMaxLotShort, iWorkStepShort);
8. Убрал переменные
bool lWorkingSELLLong = FALSE; 2012 12 21 15:00 Убрал
bool lWorkingBUYShort = FALSE; 2012 12 21 15:00 Убрал
9. 15:17 Вернул обратно переменные — из за них открывались колена не там где нужно …
bool lWorkingSELLLong = FALSE;
bool lWorkingBUYShort = FALSE;
10. 16:10 Мысль возникла — нужно уменьшать общий ТП по позициям, с увеличением колен — проверю сейчас… — хуже результат — отказался
11. Добавлен параметр extern bool UseMAGIC = 1; 1 — учитываем только ордера, открытые советником, 0 — учитываем все ордера
12. ОТПАДАЕТ: Первая сделка должна открываться только по сигналу (МА — чтобы первая сделка открывалась в направлении доминирующего тренда на H4.
13. 22:30 Сделана обработка и индикация UseMAGIC
14. 22:37 Убраны дублирующие функции

Изменения версии 1.09. 2012 12 22 (суббота)

Show »

1. Добавлены параметры int iTypeOrder, int iMagicNumber в функцию void fModifyOrder(int iTypeOrder, int iMagicNumber, int iTrailStart, double dblTrailStop, double dblAverageOpenPrice) {
3. 13:06 Исправил работу c iUseMagic = TRUE
4. 13:18 Исправил переменные
lNoOpenOrdersLong -> lNeedOpenOrdersLong
lNoOpenOrdersShort -> lNeedOpenOrdersShort
lWorkingBUYLong -> lWorkingLong
lWorkingSELLShort -> lWorkingShort
5. 13:26 Убрал переменные
//bool lWorkingSELLLong = FALSE;
//bool lWorkingBUYShort = FALSE;
6. 14:00 Исправлена работа тралов — убрана проверка в fModifyOrder: if (OrderSymbol() != Symbol() || OrderType() != iTypeOrder ) continue; //2012 12 22
7. Вычищен код от ненужных комментов от старых проверок
8. 15:23 Исправил функцию double GetProfitFromDateInCurrency(string sy=»», int op=-1, int mn=-1, datetime dt=0)
//if (mn<0 || OrderMagicNumber()==mn) { //2012 12 22
if (mn <= 0 || OrderMagicNumber()==mn || OrderMagicNumber()==mn+1 ) {
9. 15:30 Добавил параметр extern bool lCalcCurrentSymbol = TRUE; // 1 — учитываем только ордера по текущему символу, 0 — учитываем все ордера
10.15:36 Сделал расчет прибыли по текущему инструменту: string strCalcCurrentSymbol = «»; if ( lCalcCurrentSymbol == TRUE ) strCalcCurrentSymbol = Symbol();
11.16:00 Сделана проверка на нулевой депозит ( не проходили тесты в тестере …) при iCalcPercentProfit = 6;
case 6 : if ( AccountDeposit != 0 ) { tb = AccountDeposit; strCalcPercentProfit=»Deposit»; }
else { tb-=p8 ; strCalcPercentProfit=»Balance by Year»; } break;
12. Исправил ошибку в подсчете текущего профита по выбранной паре.
if ( lCalcCurrentSymbol == TRUE ) tp=dblSumProfit;
13. 17:48 Вынес в функцию GridStepOrders() расчет следующего шага
14. 21:50 Переименованы переменные:
dblOrderTakeProfitLong -> dblAverageTakeProfitLong
dblOrderTakeProfitShort -> dblAverageTakeProfitShort
gi_300 -> iCountOrdersForGrid

Изменения версии 1.09. 2012 12 23 (воскресенье)

Show »

1. 06:13 Исправил функцию
int fOpenOrder(int iTypeOrder, double dblWorkLot, int iSlippage, int iStopLoss, int iTakeProfit, string strTradeComment, int iMagic, int iExpiration, color colorOrder) {
//ad_12 — не используется
//ad_24 — не используется
//int fOpenOrder(int iTypeOrder, double dblWorkLot, double ad_12, int iSlippage, double ad_24, int iStopLoss, int iTakeProfit, string strTradeComment, int iMagic, int iExpiration, color colorOrder) {
2. 06:52 Вынес в модуль Init функцию GridStepOrders(); = индикация следующего шага показывается правильно при запуске советника.
3. 07:12 Сделал функцию void initVariables() { // Инициализация переменных (используемых в Init() и Start() )2012 12 23 06:56
4. Убрал лишние вызовы функций в модуле Start()
5. 09:55 Копаюсь в CodeBase, нашел советник 222, работает по нескольким индикаторам.
Идею из него, чтобы при deinit() печатать параметры реализовал в версии 1.09:
История 2012.05.01-2012.12.21 |Прибыль=382511.1414 |Макс.просадка=253221.0001 | Переменные: MinRisk=3;MaxRisk=30;MLF=1.5;MinRiskExp=1;MaxRiskExp=1;MaxOrders=14;StepOrders=12;TakeProfit=26;Ratio=5
6. 11:30 Добавлены параметры и переменные
extern bool UseSignal_RSI = TRUE; // Фильтр входа по RSI.
extern int TimeFrame_RSI = 15; // Рабочий таймфрейм для определения направления по RSI
int iOrderTypeRSI = -1; // сигнал по RSI -1 — not Initialized, 0 — BUY, 1 — SELL
double Filter_RSI_Point;
7. 11:30 Добавлены обработка сигналов RSI — функция CheckSignals_RSI()
Сделок стало мало. Нужно чтобы предыдущий сигнал по RSI оставался действующим, до его смены … — не нужно, т.к. неактуально по результатам тестирования
8. 13:18 Добавил параметры
extern int Filter_RSI_Min = 30; // Минимальный уровень RSI фильтра — СИГНАЛ в BUY
extern int Filter_RSI_Max = 70; // Максимальный уровень RSI фильтра — СИГНАЛ в SELL
9. 15:57 Добавил параметры
extern bool UseSignal_CCI = TRUE; // Фильтр входа по CCI.
extern int TimeFrame_CCI = 15; // Рабочий таймфрейм для определения направления по CCI
int iOrderTypeCCI = -1; // сигнал по CCI -1 — not Initialized, 0 — BUY, 1 — SELL
string strFilter_CCI; // значение CCI для индикации
string strFilter_RSI; // значение RSI для индикации
10.16:00 Добавлены обработка сигналов ССI — функция CheckSignals_ССI()
11.ВСЕ сигналы показываются, только серым цветом не активные, а рабочие — выделяются цветом
12.Добавлена индикация параметров CCI и RSI

Изменения версии 1.11. 2012 12 24 (понедельник)

Show »

// AC_AO — уберу скорее всего, буду изучать работу с фракталами и тестировать
1. 11:38 Исправил порядок проверки при подсчете ордеров в индикации
if ( ( OrderSymbol()==Symbol() && UseMAGIC == 0 ) ||
( OrderSymbol()==Symbol() && UseMAGIC == 1 && ( OrderMagicNumber()==MagicNumberShort || OrderMagicNumber()==MagicNumberLong ) ) )
2. Добавил параметр extern bool UseColorBlackFon = FALSE; // Настройки цветов для темного фона
3. Если if ( UseColorBlackFon == TRUE ) — надписи индикации, меняющие цвет, используют ColorText
4. 14:39 Исправил индикацию МА (200)
5. Решил сделать 2 логики работы по RSI:
5.1. Добавил параметр extern bool Logic_RSI = FALSE;
5.2. Добавил массив для хранения значений RSI double array_RSI[10];
// Логика работы RSI: TRUE -> Period_RSI < Filter_RSI_Min — BUY, Period_RSI > Filter_RSI_Max — SELL
// FALSE -> Period_RSI < Filter_RSI_Max, если Period_RSI растет — BUY
// Period_RSI > Filter_RSI_Min, если Period_RSI падает — SELL
6. Добавлена функция string strTrimTimeFrame( int TimeFrame_ ) { string str=StringTrimRight(StringTrimLeft(strTimeFrame(TimeFrame_)));}

Изменения версии 1.11. 2012 12 25 (вторник)

Show »

1. 15:27 Убрал вывод сообщений о не открытых первых ордерах по сигналам
2. 15:28 Решил сделать демоверсию советника, который работает только на демосчете, а на реале не будет работать
Добавил определения
#define AccountNameReal «Andrey Belov»
#define AccountNumberReal 2710376
#define MessageForClients «For acquisition of the working version EA ask to the author: abb1963@yandex.ru»
Добавил в функцию int fOpenOrder() код:
if ( ( !IsDemo() && AccountName() != strAccountNameReal ) ||
( !IsDemo() && AccountNumber() != iAccountNumberReal ) )
if ( !IsTesting() ) {
Print(«Dear «, AccountName(),»! » ,MessageForClients);
return(-1); }
Изменения версии 1.11.1 2012 12 25 (вторник)
1. Закомментил строку — // if ( !IsTesting() ) {

Изменения версии 1.12. 2012 12 26 (среда)

Show »

1. Добавил определение в модуль Init() для кроссов с JPY (3-знака в котировках) if (Digits == 5 || Digits == 3) iMulpiply5Digits = 10;
2. Сдвиг комментариев привязал к StepRow = 12; // Шаг смещения текста по вертикали
3. Добавил индикацию трала: Indication («UseTrailing» ,2,5,iStr , «»+txtUseTrailing+»»,FontSize,»Tahoma»,ColorText);
4. Добавил индикацию: Indication («SafeEquityRisk» ,2,5,iStr , «»+txtSafeEquityRisk+»»,FontSize,»Tahoma»,ColorText);

Изменения версии 1.12. 2012 12 27 (четверг)

Show »

1. Исправил все double переменные с префиксом dbl
2. 18:48 Добавил параметр extern bool UseForсeStart = TRUE; //Использовать для первой сделки только сигнал МА
if ( UseSignal_Bars == TRUE && iOrderTypeBars != OP_BUY && UseForсeStart == FALSE ) — по всем сигналам кроме МА
3. 19:36 Добавлена переменная bool lUseForсeStart = FALSE; // Быстрый старт при запуске советника (открывается первая позиция только по сигнаму МА)
4. 19:53 Добавил индикацию: Indication («ForсeStart» ,2,5,iStr , «»+txtForсeStart+»»,FontSize,»Tahoma»,ColorText);

Изменения версии 1.12. 2012 12 28 (пятница)

Show »

1. Вынес в параметры — по результатам обсуждения на форуме
extern bool MoneyManagement = TRUE; // MoneyManagement == FALSE торговля фиксированным лотом, MoneyManagement == TRUE расчет по риску в сделке
extern double MinLot = 0.01; // Фиксированный размер лота первого колена
extern double MaxLot = 2; // Максимальный размер лота ( MoneyManagement == FALSE )

Изменения версии 1.13. 2013 01 02 (среда)

Show »

1. По умолчанию параметр extern bool UseMAGIC = TRUE; // 1 — учитываем только ордера, открытые советником, 0 — учитываем все ордера

Изменения версии 1.13. 2013 01 04 (пятница)

Show »

1. Добавлены определения и их обработка:
#define AccountNameReal1 «Andrey Belov»
#define AccountNumberReal1 2710376 // Forex4you ESN Cent4 (No Swap)
#define AccountNameReal2 «Belov Andrei»
#define AccountNumberReal2 5135234 // Alpari Standart-2 (No Swap)
#define AccountNameReal3 «Belov Andrei»
#define AccountNumberReal3 908945 // Alpari ECN
#define AccountNameReal4 «Kalitnik Evgeni» // 2013 01 05
#define AccountNumberReal4 375430 // Alpari Standart-2 (No Swap)
if ( ( !IsDemo() && ( AccountName() != AccountNameReal1 || AccountNumber() != AccountNumberReal1 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal2 || AccountNumber() != AccountNumberReal2 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal3 || AccountNumber() != AccountNumberReal3 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal4 || AccountNumber() != AccountNumberReal4 ) )
2. Добавлена индикация лицензии
Indication («Licence»,0,5,26 , «» +txtLicence+»»,FontSize,»Tahoma»,colAccount);

Изменения версии 1.14 2013 01 15 (вторник)

Show »

1. Добавлен параметр
extern color ColorZeroLevel = DeepSkyBlue; // Цвет линии безубытка
13:03 Добавлены переменные
double dblAbsSum_lot;
double dblTICKVALUE = MarketInfo(Symbol(),MODE_TICKVALUE);
int close_trigger=0;
color ZLcolor,TPcolor;
double dblZeroLevel;
double dblProfit;
bool lUseFixLot;

Изменения версии 1.14 2013 01 16 (среда)

Show »

1. В функцию double fWorkLotByRisk( double dblRiskByTransaction ) добавлена проверка на минимальный лот 0,05 (для ФИНАМ)
if ( m==2 ) // 2013 01 16 для минимального лота 0.05
if ( MoneyManagement == TRUE ) { dblWorkLot = MathCeil( dblAssetToTransaction * dblRiskByTransaction / 10000 * dblAccountLeverage ) / 50; }
2. Добавлена линия безубытка DrawLine(«LineZL»,ZeroLevel,ZLcolor,0);
4. Добавлен расчет и индикация уровней безубытка и стоаута
Indication («PipsBeforeStopOut»,3,20,iStr,»»+strPipsBeforeStopOut+»» ,FontSize,»Tahoma»,colorPipsBeforeStopOut);
Indication («PipsBeforeStopOut2″,3,5,iStr-2,»»+strPipsBeforeStopOut2+»» ,FontSize+2,»Wingdings»,colorPipsBeforeStopOut);
Indication («ZeroLevel»,3,20,iStr,»»+strZeroLevel+»» ,FontSize,»Tahoma»,ColorZeroLevel);
Indication («ZeroLevel2″,3,5,iStr-2,»»+strZeroLevel2+»» ,FontSize+2,»Wingdings»,ColorZeroLevel);

 Изменения версии 1.15   2013 02 08 (пятница)

Show »

1. Добавлены определения и их обработка:
#define AccountNameReal6    «Ivan Glazov»
#define AccountNumberReal6  426169             // TradeFort-real

Изменения версии 1.15   2013 02 16 (суббота)

Show »

1. Добавлены определения и их обработка:
#define AccountNameReal7    «Shevelev Boris Yakovlevich»
#define AccountNumberReal7  711224             // Roboforex procent

Изменения версии 1.15   2013 02 18 (понедельник)

Show »

1. Добавлены определения и их обработка:

#define AccountNameReal8    «Belmont corp. Lutskovich Aliaksandr»
#define AccountNumberReal8  5015654             // Alpari-Standard1

Изменения версии 1.15   2013 02 20 (среда)

Show »

1. Исправлена ошибка Divide Zero — при нулевом балансе + кредите проявлялась только в индикации
2. Добавлены определения и их обработка:
#define AccountNameReal9    «Vorontsov Aleksandr»
#define AccountNumberReal9  2734467             // EGlobal-Cent2
#define AccountNameReal10   «Vorontsov Aleksandr»
#define AccountNumberReal10 2734468             // EGlobal-Cent4
extern double  MinRisk              = 1;
extern double  MaxRisk              = 20;
extern int     MaxOrdersStopNextStep= 10;
extern double  MultiLotsFactor      = 1.7;
extern double  StepOrders           = 14.0;
extern double  TakeProfit           = 23.0;
extern double  Grid_Ratio           = 0;
extern bool    UseForсeStart     = TRUE;

Изменения версии 1.15   2013 03 02 (суббота)

Show »

#define AccountNameReal11   «Levashev Sergei»
#define AccountNumberReal11 1706252             // EGlobal-Cent1

Изменения версии 1.15   2013 03 03 (воскресенье)

Show »

#define AccountNameReal12   «Arthur Abakumov»   // 2013 03 03
#define AccountNumberReal12 2692669             // EGlobal-Cent4 

Изменения версии 1.15   2013 03 11 (понедельник)

Show »

#define AccountNameReal13   «Верещагин Андрей Павлович»   // 2013 03 11  Иванов Евгений
#define AccountNumberReal13 3538049             // InstaForex-Cent2.com
#define AccountNameReal14   «Верещагин Андрей Павлович»   // 2013 03 11
#define AccountNumberReal14 3538053             // InstaForex-Cent2.com 

Изменения версии 1.15   2013 03 12 (вторник)

Show »

#define AccountNameReal15   «Iurii Nikulin»   // 2013 03 12
#define AccountNumberReal15 8027643             // EGlobal-Classic 

Изменения версии 1.15   2013 03 14 (четверг)

Show »

#define AccountNameReal16 «Iurii Nikulin» // 2013 03 14
#define AccountNumberReal16 8027846 // EGlobal-Cent4

Изменения версии 1.15   2013 03 18 (понедельник)

Show »

#define AccountNameReal17   «Иванов Евгений Викторович»   // 2013 03 18
#define AccountNumberReal17 404                //  DivenFX-Main

Изменения версии 1.15   2013 03 19 (вторник)

Show »

#define AccountNameReal18   «Виктор Коваль»   // 2013 03 19
#define AccountNumberReal18 2863
#define AccountNumberReal19 2872
#define AccountNumberReal20 52426
#define AccountNumberReal21 3953890
#define AccountNumberReal22 102948                

Изменения версии 1.16   2013 03 21 (четверг)

Show »

#define AccountNumberReal23 102785
#define AccountNumberReal24 379727
#define AccountNumberReal25 5018202
#define AccountNumberReal26 5139764
#define AccountNumberReal27 5140285
#define AccountNumberReal28 5017246
#define AccountNumberReal29 5144934
22:20 1. Убран алгоритм работы по CCI (дублирование — RSI работает лучше)
22:59 2. Убран алгоритм работы по Bars и AC_AO
22:45 3. Добавлен параметр
extern bool    UseChangeColors      = TRUE;        // Использовать изменение цветов индикации, FALSE — все надписи одним цветом ColorText22:37 4. Убраны параметры во внутренние
double  MinRiskExponent      = 1;     // Коэффициент увеличения минимального  риска по сигналам МА
double  MaxRiskExponent      = 1;     // Коэффициент увеличения максимального риска по сигналам МА
int     FontSize             = 10;          // Размер шрифта индикацииstring t8=              «==== Индикатор прибыли i-Profit ====»;
bool   lCalcCurrentSymbol    = TRUE;        // 1 — учитываем только ордера по текущему символу, 0 — учитываем все ордера
int    iCalcPercentProfit    = 5;           // Расчёт процента прибыли относительно:
//  0 — текущего баланса
//  1 — баланса на начало дня
//  2 — баланса на начало недели
//  3 — баланса на начало месяца
//  4 — баланса на начало квартала
//  5 — баланса на начало года
//  6 — расчет от суммы депозитов (без учета выводов средств) — моя доработка
int   ShiftRow             =  55;           // Смещение текста по вертикали
int   StepRow              =  12;           // Шаг смещения текста по вертикали
int   ShiftColumn1         =   5;  //130;   // Координата X первой колонки
int   ShiftColumn2         = 105; //280;    // Координата X второй колонки
int   ShiftColumn3         = 170; //340;    // Координата X третьей колонкиbool    UseColorBlackFon     = TRUE;        // Настройки цветов для темного фона
color   ColorText            = Silver;      // Цвет текста
color   ColorDemo            = DarkTurquoise;   // Цвет текста подписи демо-счета
color   ColorReal            = MediumSpringGreen;   // Цвет текста подписи реального счета
color   ColorProfit          = LimeGreen;   // Цвет прибыли
color   ColorLoss            = OrangeRed;   // Цвет убытка
color   СolorNeededLong      = DeepSkyBlue; // Цвет текста нехватки ордеров в BUY
color   СolorNeededShort     = DeepPink;    // Цвет текста нехватки ордеров в SELL
color   СolorFullLock        = LimeGreen;   // Цвет текста BUY = SELL

Изменения версии 1.16   2013 03 22 (пятница)

Show »

#define AccountNameReal0    «Andrey Belov»
//#define AccountNameReal0    «Belov Andrei»
#define AccountNumberReal0  2729806             // Forex4you ESN Cent4  (No Swap) 2013 02 06
#define AccountNumberReal1  2739698             // Forex4you ESN Cent4  (No Swap) 2013 03 04
#define AccountNumberReal2  5135234             // Alpari Standart-2    (No Swap)
#define AccountNumberReal3  908945              // Alpari ECN
//==================================================================================
#define AccountNameReal1    «Kalitnik Evgeni»   // 2013 01 05
#define AccountNumberReal4   375430             // Alpari Standart-2    (No Swap)
//==================================================================================
#define AccountNameReal2    «Фатеев Михаил Михайлович»   // 2013 01 16
#define AccountNumberReal5   3093858             // InstaForex-Cent.com
//==================================================================================
#define AccountNameReal3    «Ivan Glazov»       // 2013 02 08
#define AccountNumberReal6  426169             // TradeFort-real
//==================================================================================
#define AccountNameReal4    «Shevelev Boris Yakovlevich» // 2013 02 16
#define AccountNumberReal7  711224             // Roboforex procent
//==================================================================================
#define AccountNameReal5    «Belmont corp. Lutskovich Aliaksandr»  // 2013 02 18
#define AccountNumberReal8  5015654             // Alpari-Standard1
//==================================================================================
#define AccountNameReal6    «Vorontsov Aleksandr»  // 2013 02 21
#define AccountNumberReal9  2734467             // EGlobal-Cent2
#define AccountNumberReal10 2734468             // EGlobal-Cent4
//==================================================================================
#define AccountNameReal7    «Levashev Sergei»   // 2013 03 02
#define AccountNumberReal11 1706252             // EGlobal-Cent1
//==================================================================================
#define AccountNameReal8    «Arthur Abakumov»   // 2013 03 03
#define AccountNumberReal12 2692669             // EGlobal-Cent4
//==================================================================================
#define AccountNameReal9    «Верещагин Андрей Павлович»   // 2013 03 11
#define AccountNumberReal13 3538049             // InstaForex-Cent2.com
#define AccountNumberReal14 3538053             // InstaForex-Cent2.com
//==================================================================================
#define AccountNameReal10   «Iurii Nikulin»   // 2013 03 12
#define AccountNumberReal15 8027643             // EGlobal-Classic
#define AccountNumberReal16 8027846             // EGlobal-Cent4
//==================================================================================
#define AccountNameReal11   «Иванов Евгений Викторович»   // 2013 03 18
#define AccountNumberReal17 404                //  DivenFX-Main
//==================================================================================
#define AccountNameReal12   «Виктор Коваль»   // 2013 03 19
#define AccountNumberReal18 2863
#define AccountNumberReal19 2872
#define AccountNumberReal20 52426
#define AccountNumberReal21 3953890
#define AccountNumberReal22 102948
// 2013 03 21
#define AccountNumberReal23 102785
#define AccountNumberReal24 379727
#define AccountNumberReal25 5018202
#define AccountNumberReal26 5139764
#define AccountNumberReal27 5140285
#define AccountNumberReal28 5017246
#define AccountNumberReal29 514493410:25 Код в функции int fOpenOrder()
( !IsDemo() && ( AccountName() != AccountNameReal0  || AccountNumber() != AccountNumberReal0 ) ) &&   /*»Andrey Belov»*/
( !IsDemo() && ( AccountName() != AccountNameReal0  || AccountNumber() != AccountNumberReal1 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal0  || AccountNumber() != AccountNumberReal2 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal0  || AccountNumber() != AccountNumberReal3 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal1  || AccountNumber() != AccountNumberReal4 ) ) &&   /*»Kalitnik Evgeni»            // 2013 01 05 */
( !IsDemo() && ( AccountName() != AccountNameReal2  || AccountNumber() != AccountNumberReal5 ) ) &&   /*»Фатеев Михаил Михайлович»   // 2013 01 16 */
( !IsDemo() && ( AccountName() != AccountNameReal3  || AccountNumber() != AccountNumberReal6 ) ) &&   /*»Ivan Glazov»                // 2013 02 08 */
( !IsDemo() && ( AccountName() != AccountNameReal4  || AccountNumber() != AccountNumberReal7 ) ) &&   /*Shevelev Boris Yakovlevich»  // 2013 02 16 */
( !IsDemo() && ( AccountName() != AccountNameReal5  || AccountNumber() != AccountNumberReal8 ) ) &&   /*»Belmont corp. Lutskovich Aliaksandr»  // 2013 02 18*/
( !IsDemo() && ( AccountName() != AccountNameReal6  || AccountNumber() != AccountNumberReal9 ) ) &&   /*»Vorontsov Aleksandr»        // 2013 02 21 */
( !IsDemo() && ( AccountName() != AccountNameReal6  || AccountNumber() != AccountNumberReal10 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal7  || AccountNumber() != AccountNumberReal11 ) ) &&  /*»Levashev Sergei»            // 2013 03 02 */
( !IsDemo() && ( AccountName() != AccountNameReal8  || AccountNumber() != AccountNumberReal12 ) ) &&  /*»Arthur Abakumov»            // 2013 03 03 */
( !IsDemo() && ( AccountName() != AccountNameReal9  || AccountNumber() != AccountNumberReal13 ) ) &&  /*»Верещагин Андрей Павлович»  // 2013 03 11 */
( !IsDemo() && ( AccountName() != AccountNameReal9  || AccountNumber() != AccountNumberReal14 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal10 || AccountNumber() != AccountNumberReal15 ) ) && /*»Iurii Nikulin»   // 2013 03 12 */
( !IsDemo() && ( AccountName() != AccountNameReal10 || AccountNumber() != AccountNumberReal16 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal11 || AccountNumber() != AccountNumberReal17 ) ) && /*»Иванов Евгений Викторович»   // 2013 03 18 */
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal18 ) ) && /* «Виктор Коваль»              // 2013 03 19 */
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal19 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal20 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal21 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal22 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal23 ) ) && /*                              // 2013 03 21 */
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal24 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal25 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal26 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal27 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal28 ) ) &&
( !IsDemo() && ( AccountName() != AccountNameReal12 || AccountNumber() != AccountNumberReal29 ) )10:25 Код в функции fShowComments()
string txtLicence = «UNREGISTERED VERSION» ;
if ( ( !IsDemo() && AccountName() == AccountNameReal0 && AccountNumber() == AccountNumberReal0 ) )  /*»Andrey Belov»*/
txtLicence = «Licence 0  » + AccountNameReal0;
if ( ( !IsDemo() && AccountName() == AccountNameReal0 && AccountNumber() == AccountNumberReal1 ) )
txtLicence = «Licence 0  » + AccountNameReal0;
if ( ( !IsDemo() && AccountName() == AccountNameReal0 && AccountNumber() == AccountNumberReal2 ) )
txtLicence = «Licence 0  » + AccountNameReal0;
if ( ( !IsDemo() && AccountName() == AccountNameReal0 && AccountNumber() == AccountNumberReal3 ) )
txtLicence = «Licence 0  » + AccountNameReal0;
if ( ( !IsDemo() && AccountName() == AccountNameReal1 && AccountNumber() == AccountNumberReal4 ) )  /*»Kalitnik Evgeni»            // 2013 01 05 */
txtLicence = «Licence 1  » + AccountNameReal1;
if ( ( !IsDemo() && AccountName() == AccountNameReal2 && AccountNumber() == AccountNumberReal5 ) )  /*»Фатеев Михаил Михайлович»   // 2013 01 16 */
txtLicence = «Licence 2  » + AccountNameReal2;
if ( ( !IsDemo() && AccountName() == AccountNameReal3 && AccountNumber() == AccountNumberReal6 ) )  /*»Ivan Glazov»                // 2013 02 08 */
txtLicence = «Licence 3  » + AccountNameReal3;
if ( ( !IsDemo() && AccountName() == AccountNameReal4 && AccountNumber() == AccountNumberReal7 ) )  /*Shevelev Boris Yakovlevich»  // 2013 02 16 */
txtLicence = «Licence 4  » + AccountNameReal4;
if ( ( !IsDemo() && AccountName() == AccountNameReal5 && AccountNumber() == AccountNumberReal8 ) )  /*»Belmont corp. Lutskovich Aliaksandr»  // 2013 02 18*/
txtLicence = «Licence 5  » + AccountNameReal5;
if ( ( !IsDemo() && AccountName() == AccountNameReal6 && AccountNumber() == AccountNumberReal9 ) )  /*»Vorontsov Aleksandr»        // 2013 02 21 */
txtLicence = «Licence 6  » + AccountNameReal6;
if ( ( !IsDemo() && AccountName() == AccountNameReal6 && AccountNumber() == AccountNumberReal10 ) )
txtLicence = «Licence 6 » + AccountNameReal6;
if ( ( !IsDemo() && AccountName() == AccountNameReal7 && AccountNumber() == AccountNumberReal11 ) )  /*»Levashev Sergei»            // 2013 03 02 */
txtLicence = «Licence 7 » + AccountNameReal7;
if ( ( !IsDemo() && AccountName() == AccountNameReal8 && AccountNumber() == AccountNumberReal12 ) )  /*»Arthur Abakumov»            // 2013 03 03 */
txtLicence = «Licence 8 » + AccountNameReal8;
if ( ( !IsDemo() && AccountName() == AccountNameReal9 && AccountNumber() == AccountNumberReal13 ) )  /*»Верещагин Андрей Павлович»  // 2013 03 11 */
txtLicence = «Licence 9 » + AccountNameReal9;
if ( ( !IsDemo() && AccountName() == AccountNameReal9 && AccountNumber() == AccountNumberReal14 ) )
txtLicence = «Licence 9 » + AccountNameReal9;
if ( ( !IsDemo() && AccountName() == AccountNameReal10 && AccountNumber() == AccountNumberReal15 ) ) /*»Iurii Nikulin»   // 2013 03 12 */
txtLicence = «Licence 10 » + AccountNameReal10;
if ( ( !IsDemo() && AccountName() == AccountNameReal10 && AccountNumber() == AccountNumberReal16 ) )
txtLicence = «Licence 10 » + AccountNameReal10;
if ( ( !IsDemo() && AccountName() == AccountNameReal11 && AccountNumber() == AccountNumberReal17 ) ) /*»Иванов Евгений Викторович»   // 2013 03 18 */
txtLicence = «Licence 11 » + AccountNameReal11;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal18 ) ) /* «Виктор Коваль»              // 2013 03 19 */
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal19 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal20 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal21 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal22 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal23 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal24 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal25 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal26 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal27 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal28 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
if ( ( !IsDemo() && AccountName() == AccountNameReal12 && AccountNumber() == AccountNumberReal29 ) )
txtLicence = «Licence 12 » + AccountNameReal12;
Indication («Licence»,0,5,26  ,  «» +txtLicence+»»,FontSize,»Tahoma»,colAccount);

Изменения версии 1.16   2013 04 11 (четверг)

Show »

#define AccountNameReal13   «Glazov Ivan»       // 2013 04 11
#define AccountNumberReal30 290196              // Alpari-Micro 2013 04 11

Изменения версии 1.16   2013 04 14 (воскресенье)

Show »

1. Исправлена функция void fModifyOrder(int iTypeOrder, int iMagicNumber, int iTrailStart, double dblTrailStop, double dblAverageOpenPrice) {
Сделан цикл для обработки ошибок брокера при модификации ордеров (код из вагонетки)
bool   result;
int    error, back, cmd=0;
cmd=0;
while(true)
{
cmd=cmd+1;//Print(«Изменение totalsell cmd=»,cmd);
result = OrderModify(OrderTicket(), dblAverageOpenPrice, iNewStopLoss, OrderTakeProfit(), 0, Aqua);
back=0;
if(result!=TRUE){ error=GetLastError(); if(error>2){Print(«OrderModify LastError = «,error);}} else error=0;
if(error==129)  {RefreshRates(); back=100;} // Неправильная цена
if(error==135)  {RefreshRates(); back=100;} // Цена изменилась
if(error==136)  {RefreshRates(); back=100;} // Нет цен
if(error==137)  {RefreshRates(); back=100;} // Брокер занят
if(error==138)  {RefreshRates(); back=100;} // Новые цены
if(error==4108) {RefreshRates(); back=0;}   // Неверный номер тикета
//Print(«1 RefreshRates back = «,back);
if(back ==100) continue; // Если нет ордера и пришла ошибка тогда возврат в начало цикла
else break;
}2. Добавлена функция модификации ТП по всем ордерам при указании мышкой на график: int ModifyTPByMouse()
3. Добавлен параметр: extern bool  UseModifyTPByMouse     = TRUE;       // Использовать модицикацию ТП открытых ордеров по указанию мышкой на график
4. В модуль start() добавлен код:  if ( UseModifyTPByMouse  == TRUE ) {ModifyTPByMouse();}
5. Добавлен параметр: extern bool  IndicationModifyTPMouse = FALSE;  //выводить информацию на экран при модификации ТП ордеров при указании мышкой на график
6. Добавлены параметры:
extern string t8 =              «========== Планировщик ==========»;
extern int StartHour          = 0;
extern int StartMinute        = 0;
extern int StopHour           = 0;
extern int StopMinute         = 0;
extern int StartingTradeDay   = 0;
extern int EndingTradeDay     = 7;
extern string t9 =              «===== Дополнительные функции =====»;
extern bool FreezeAfterTP     = FALSE;       // TRUE — Не открывать новые сделки после срабатывания ТП
extern bool CloseAllOrders    = FALSE;       // TRUE — Закрыть ВСЕ открытые ордера по текущей паре
7. Добавлена функция bool IsTradeTime() — ограничение по времени работы советника
8. Закомментил — сделки стали открываться по уровням без задержек!!!
//if (iTime0 == Time[0]) return (0);    //iTime0 = Time[0];
9. //if (lOpenLastOrderLong) // закомментил, чтобы модификация ТП ордеров происходила сразу же, если был закрыл один из ордеров руками!
//{                        .. Нужно тестить, когда терминал будет работать
//if (lOpenLastOrderShort)
//{
10. п. 3-5 отключены, т.к. работают только при помещении эксперта на график… В дальнейшем возможно разберусь с этим и реализую.

Изменения версии 1.16   2013 04 15 (понедельник)

Show »

09:50 1. В функцию  fCloseAllOpenOrders() добавлен цикл обработки ошибок брокера при закрытии ордеров
bool   result;
int    error, back, cmd=0;
cmd=0;
while(true)
{
cmd=cmd+1;
result = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), Slippage, Red);
back=0;
if(result!=TRUE){ error=GetLastError(); if(error>2){Print(«OrderClose LastError = «,error );}} else error=0;
if(error==129)  {RefreshRates(); back=100;} // Неправильная цена
if(error==135)  {RefreshRates(); back=100;} // Цена изменилась
if(error==136)  {RefreshRates(); back=100;} // Нет цен
if(error==137)  {RefreshRates(); back=100;} // Брокер занят
if(error==138)  {RefreshRates(); back=100;} // Новые цены
if(error==4108) {RefreshRates(); back=0;}   // Неверный номер тикета
//Print(«1 RefreshRates back = «,back);
if(back ==100) continue; // Если нет ордера и пришла ошибка тогда возврат в начало цикла
else break;
10:29 2. Закомментил код — модицикация ТП происходит при добавлении ордеров к пирамиде, а так же при закрытии любого ордера пирамиды!
//if (lOpenLastOrderLong) // 2013 04 15 — закомментил для того,чтобы ТП модифицировался при добавлении ручных сделок
//if (lOpenLastOrderShort) // 2013 04 15 — закомментил для того,чтобы ТП модифицировался при добавлении ручных сделок
10:46 3. В функцию  fCloseAllOpenOrders() добавлена обработка параметра UseMAGIC
ПРИ ВКЛЮЧЕННОМ CloseAllOrders = TRUE закроются ВСЕ ОТКРЫТЫЕ ОРДЕРА, в т.ч. ручные, если UseMAGIC = FALSE
{  // 2013 04 15 Закрытие ВСЕХ ордеров
if ( ( OrderType() == OP_BUY && UseMAGIC == 1 && OrderMagicNumber()==MagicNumberLong ) ||
( OrderType() == OP_BUY && UseMAGIC == 0 ) ||
( OrderType() == OP_SELL && UseMAGIC == 1 && OrderMagicNumber()==MagicNumberShort ) ||
( OrderType() == OP_SELL && UseMAGIC == 0 ) )
10:55 5. Сделал индикацию параметров
string txtCloseAllOrders  = «CloseAllOrders:  OFF»;
if ( CloseAllOrders == TRUE )
{
txtCloseAllOrders  = «CloseAllOrders:  ON»;
iStr = iStr + iStrStep;
Indication («CloseAllOrders»        ,2,5,iStr  ,  «»+txtCloseAllOrders+»»,FontSize+1,»Tahoma»,ColorLoss);
}
string txtFreezeAfterTP  = «FreezeAfterTP:    OFF»;
if ( FreezeAfterTP == TRUE )
{
txtFreezeAfterTP  = «FreezeAfterTP:    ON»;
iStr = iStr + iStrStep;
Indication («FreezeAfterTP»        ,2,5,iStr  ,  «»+txtFreezeAfterTP+»»,FontSize,»Tahoma»,ColorText);
}
11:30 6. Выдается запрос на подтверждение закрытия ВСЕХ ОРДЕРОВ
string strMsg = «ALL positions will be closed on «+Symbol();
if ( UseMAGIC == 1 )
strMsg = strMsg + » ( only Magics » + MagicNumberLong + » / «+ MagicNumberShort + » )»;
int ret=MessageBox(strMsg + » !nAre you sure ?», «ATTENTION!», MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2);
11:42 7. Сделана проверка на наличие открытых ордеров перед их закрытием:
if ( iCountWorkingOrdersLong == 0 && iCountWorkingOrdersShort == 0 ) return (0);
8. В модуле start() поменял местами вызов функций:
initVariables();
if (CloseAllOrders == TRUE) {fCloseAllOpenOrders(); return (0);}
9. Изменены параметры по умолчанию:
extern double  MinRisk              = 0.5
extern double  MaxRisk              = 50
extern int     MaxOrders            = 12
extern int     MaxOrdersStopNextStep= 10
extern double  MultiLotsFactor      = 2.2
extern double  StepOrders           = 29.0
extern double  TakeProfit           = 20.0
extern double  Grid_Ratio           = 4
extern int     TimeFrame_MA         = 60
10. Добавлен параметр: Признак модификации общего ТП по всем позициям, после открытия новых или закрытия части позиций
extern bool AutoModifyTP      = TRUE;       // FALSE — Не будут автоматически модифицироваться ТП
11. Сделал индикацию параметра
string txtAutoModifyTP  = «AutoModifyTP:    OFF»;
if ( AutoModifyTP == TRUE )
{
txtAutoModifyTP  = «AutoModifyTP:    ON»;
iStr = iStr + iStrStep;
Indication («AutoModifyTP»        ,2,5,iStr  ,  «»+txtAutoModifyTP+»»,FontSize,»Tahoma»,ColorText);
12.Добавил индикацию наличия отложенных ордеров в левом нижнем углу
string txtOrdersBUY = «»;
string txtOrdersSELL = «»;
if ( iOrders_buyLimit != 0 )
txtOrdersBUY = txtOrdersBUY
+ «BL » + iOrders_buyLimit
+  »  ( » + DoubleToStr(dblLots_buyLimit,2) + » )»;
if ( iOrders_buyStop != 0 )
txtOrdersBUY = txtOrdersBUY
+ »  BS » + iOrders_buyStop
+  »  ( » + DoubleToStr(dblLots_buyStop,2) + » )»;
if ( iOrders_sellLimit != 0 )
txtOrdersSELL = txtOrdersSELL
+ «SL » + iOrders_sellLimit
+  »  ( » + DoubleToStr(dblLots_sellLimit,2) + » )»;
if ( iOrders_sellStop != 0 )
txtOrdersSELL = txtOrdersSELL
+ »  SS » + iOrders_sellStop
+  »  ( » + DoubleToStr(dblLots_sellStop,2) + » )»;
Indication («OrdersSELL»        ,2,5,iStr  ,  «»+txtOrdersSELL+»»,FontSize,»Tahoma»,ColorText);
iStr = iStr + iStrStep;
Indication («OrdersBUY»        ,2,5,iStr  ,  «»+txtOrdersBUY+»»,FontSize,»Tahoma»,ColorText);
iStr = iStr + 1;
13. Сделал удаление и отложенных ордеров при включенном CloseAllOrders = TRUE
if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)
{ OrderDelete(OrderTicket()); if (GetLastError()>1) Print(«Error OrderDelete() ticket= «,OrderTicket(),» err= «,GetLastError() ); }

Изменения версии 1.17   2013 04 16 (вторник)

Show »

20:31 1. Исправлена ошибка: при тестировании с включенным AutoModifyTP = TRUE; :OrderModify error 1
dblAverageTakeProfitLong = NormalizeDouble( dblAverageOpenPriceLong + TakeProfit * Point * iMulpiply5Digits,  Digits ); // 2013 04 16
dblAverageTakeProfitShort = NormalizeDouble( dblAverageOpenPriceShort — TakeProfit * Point * iMulpiply5Digits,  Digits ); // 2013 04 16
if ( dblAverageTakeProfitLong != NormalizeDouble( OrderTakeProfit(),  Digits ) ) // 2013 04 16 Проверка на необходимость модификации ТП
if ( dblAverageTakeProfitShort != NormalizeDouble( OrderTakeProfit(),  Digits ) ) // 2013 04 16 Проверка на необходимость модификации ТП

Изменения версии 1.17   2013 04 18 (четверг):

Show »

13:12 1. Добавлены параметры вагонетки:
extern bool UseVagonetka      = TRUE;             // TRUE — Будет работать алгоритм Вагонетки (ограничение убытков по открытой пирамиде)
// Переменные закрытия ордеров buy и sell
extern int     Order_open   = 5;     // Количество уже открытых ордеров
extern int     TakePr_point = 10;    // TakeProfit для обнуления вагонетки
extern int     TakePr_go    = 3;     // Спред для обнуления вагонетки
extern int     WorkClose    = 2;     // 0 — закрываем только по заданным выще параметрам на закрытие ордеров buy и sell,
// 1 — закрываем по плюсу и закрываем все ордера, когда хотя бы один из buy и sell имеет по 3 ордира
// 2 — закрываем только по большому плюсу ордеров buy или sell,
// 3 — закрываем против тренда вверх
extern int     CloseTP      = 10;    // Профит больший нуля при котором закрываються все ордера WorkClose=1, ордера buy и sell по отдельности WorkClose=2
extern bool    TrailVg      = FALSE;  // Использование трейлинга Вагонетки
extern double  TrailVgStart = 10.0;  // Расстояние начала трала от линии Profit в пунктах (классический ТП в пунктах)
extern double  TrailVgStop  = 5.0;   // Величина трала после Tral_Start в пунктах
2. В конец функции start() добавлен вызов вагонетки:
if ( UseVagonetka ) StartVagonetka(); // 2013 04 18
3. Добавлены функции вагонетки
15:28 4. Причесал в версии FST 1.17 код вагонетки. Исправил некоторые ошибки: Не было фигурных скобок в блоке:
if( error==129 )  { RefreshRates(); back=100; } // Неправильная цена
if( error==135 )  { RefreshRates(); back=100; } // Цена изменилась
if( error==136 )  { RefreshRates(); back=100; } // Нет цен
if( error==137 )  { RefreshRates(); back=100; } // Брокер занят
if( error==138 )  { RefreshRates(); back=100; } // Новые цены
if( error==4108 ) { RefreshRates(); back=0;   } // Неверный номер тикета
if( error==1 )    { RefreshRates(); back=0;   } // Нет ошибки, но результат неизвестен
16:34 4. Добавлена индикация режима вагонетки:
Indication («Vagonetka»        ,2,5,iStr  ,  «»+txtUseVagonetka+»»,FontSize,»Tahoma»,ColorText);
20:43 Вернул сигналы AC_AO и Bars

Изменения версии 1.17   2013 04 19 (пятница)

Show »

21:10 1. Исправил код вагонетки на присланный — убрал лишние параметры и ииндикацию настроек вагонетки
21:30 2. Сделал не активные сигналы невидимыми (кроме сигнала МА)

Изменения версии 1.17   2013 04 21 (воскресенье)

Show »

21:53 1. В функцию deinit() добавлена индикация Вагонетки:
«; Vagonetka=»,UseVagonetka,»/WorkClose=»,WorkClose,»/»,Order_open,»/»,Spred_go,»/»,CloseTP

Изменения версии 1.17   2013 04 22 (понедельник)

Show »

10:18 1. Добавлен параметр Стоплосс
extern double  StopLoss = 180.0;      // СЛ по умолчанию
iTicketLong = fOpenOrder(OP_BUY, dblNextLotLong, Slippage, StopLoss, 0, TradeComment, MagicNumberLong, 0, Lime);
iTicketShort = fOpenOrder(OP_SELL, dblNextLotShort, Slippage, StopLoss, 0, TradeComment, MagicNumberShort, 0, HotPink);
14:40 1. Добавлена индикация стоплосса
string txtStopLoss       = «StopLoss:         » + DoubleToStr(StopLoss, 0);
iStr = iStr + iStrStep;
Indication («StopLoss»      ,2,5,iStr ,  «»+txtStopLoss+»»,FontSize,»Tahoma»,ColorText);
if (ObjectFind(«StopLoss») >= 0) ObjectDelete(«StopLoss»);  // 2013 04 22

Изменения версии 1.17   2013 04 23 (вторник)

Show »

13:48 1. Исправлена ошибка: выдавалось сообщение Error 0 — при попытке открытия ордера
double fStopLossBUY(double dblPrice, int iStopLoss) {
if (iStopLoss == 0) return (0);
return ( NormalizeDouble(dblPrice — iStopLoss * Point, Digits));
}
double fTakeProfitBUY(double dblPrice, int iTakeProfit) {
if (iTakeProfit == 0) return (0);
return ( NormalizeDouble( dblPrice + iTakeProfit * Point, Digits));
}
double fStopLossSELL(double dblPrice, int iStopLoss) {
if (iStopLoss == 0) return (0);
return ( NormalizeDouble(dblPrice + iStopLoss * Point, Digits));
}
double fTakeProfitSELL(double dblPrice, int iTakeProfit) {
if (iTakeProfit == 0) return (0);
return ( NormalizeDouble( dblPrice — iTakeProfit * Point, Digits));
}

Изменения версии 1.17   2013 04 24 (среда)

Show »

21:20 1. Приняты изменения трала вагонетки: добавлены функции:
int StartVagonetka()       // Алгоритм Вагонетки
int OrderOpen_TEST()       // Отслеживание количества открытых ордеров
int VagonelkaCloseAll()    // Закрытие в плюс всех ордеров
int VagonelkaCloseBuy()    // Закрытие в плюс всех ордеров БАЙ
int VagonelkaCloseSell()   // Закрытие в плюс всех ордеров СЕЛ
int VagonelkaTrailingBuy() // Трейлинг ордеров в БАЙ
int VagonelkaTrailingSell()// Трейлинг ордеров в СЕЛ
22:45 2. Убрана функция int Close_All_Orders()     // закрытие всех ордеров — проверить, может быть убрать функцию и использовать свою
Вместо нее используется функция fCloseAllOpenOrders()
22:47 3. Вынес в функцию start() из функции fCloseAllOpenOrders()
string strMsg = «ALL positions will be closed on «+Symbol();
if ( UseMAGIC == 1 )
strMsg = strMsg + » ( only Magics » + MagicNumberLong + » / «+ MagicNumberShort + » )»;
int ret=MessageBox(strMsg + » !nAre you sure ?», «ATTENTION!», MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2);
//if(ret==IDNO) return(-1);
if(ret==IDYES) { fCloseAllOpenOrders(); return (0); }
00:10 4. Убраны параметры и переменные:
//extern int     Spred_go     = 3;     // Спред для обнуления вагонетки
00:13 5. Переименованы переменные и параметры:
cnt1    ->    iCountOrdersBuy
cnt2    ->    iCountOrdersSell
CloseTP    ->    SaveProfit
WorkClose    ->    LogicVagonetka
Order_open     ->    OrdersVagonetka
00:25 Вместо переменных используются мои:
totalbuy ->   iCountWorkingOrdersLong
totalsell ->   iCountWorkingOrdersShort

Изменения версии 1.17   2013 04 25 (четверг)

Show »

10:10 1. Убрана функция OrderOpen_TEST
11:07 2. Добавлены глобальные переменные (вынесены из модуля старт)
double dblCalcProfitLong;              // Суммарный профит по открытым позициям BUY  = fCalcProfit(OP_BUY,  MagicNumberLong);
double dblCalcProfitShort;             // Суммарный профит по открытым позициям SELL = fCalcProfit(OP_SELL, MagicNumberShort);
11:14 Все функции Вагонетки используют мои переменные (убран дублирующий код и лишние переменные)
18:02 4. В модуль init добавлен код
if ( LogicVagonetka == 1 )
strLogicVagonetka = «Close All» + DoubleToStr(SaveProfit,0);
else
if ( LogicVagonetka == 2 )
strLogicVagonetka = «Close Profit » + DoubleToStr(SaveProfit,0);
else
if ( LogicVagonetka == 3 )
strLogicVagonetka = «Trailing » + DoubleToStr(TrailStart2,0) + » / » + DoubleToStr(TrailStop2,0) ;

Изменения версии 1.17   2013 04 28 (воскресенье)

Show »

10:18 1. Добавлен параметр
extern bool    TrailTP           = TRUE;          // TRUE — Будут двигаться ТП по открытым сделкам в плюсе
12:20 2. В функцию void fModifyOrder(int iTypeOrder, int iMagicNumber, int iTrailStart, double dblTrailStop, double dblAverageOpenPrice) {
Добавлена переменная double dblNewTakeProfit;
и код:
if (dblOrderStopLoss == 0.0 || (dblOrderStopLoss != 0.0 && dblNewStopLoss > dblOrderStopLoss) || TrailTP == TRUE )
if ( TrailTP == TRUE ) // 2013 04 28
{ dblNewTakeProfit = Bid + TakeProfit * Point * iMulpiply5Digits;
else dblNewTakeProfit = OrderTakeProfit();
if ( dblOrderStopLoss != 0.0 && dblNewStopLoss < dblOrderStopLoss ) dblNewStopLoss = dblOrderStopLoss; // 2012 04 28
result = OrderModify(OrderTicket(), dblAverageOpenPrice, dblNewStopLoss, dblNewTakeProfit, 0, Aqua);
12:50 3. Добавлены глобальные переменные для наращивания позиций по тренду
bool lTrendLong  = FALSE;
bool lTrendShort = FALSE;
12:55 При включении трала по открытым позициям переменным присваивается значение
lTrendLong  = True;       lTrendShort = True;
12:56 4. При открытии первых колен добавлено условие:
if ( ( lNeedOpenOrdersLong && iCountWorkingOrdersLong < 1 && IsTradeTime() ) || lTrendLong ) // 2012 04 28
if ( ( lNeedOpenOrdersShort && iCountWorkingOrdersShort < 1 && IsTradeTime() ) || lTrendShort ) // 2012 04 28

Изменения версии 1.17   2013 05 18 (суббота)

Show »

11:39 1. Добавлен параметр
extern bool    OnlyCommentNotTrade  = TRUE;       // 1 — только комментарии на графике, 0 — реальная торговля
11:50 2. Добавлена индикация:
if ( OnlyCommentNotTrade != 0 )
{  string txtNotTrade = «Expert DISABLED»;
color colNotTrade = Crimson;
//txtNotTrade = Expert ENABLED!»;
//txtNotTrade = txtNotTrade + » Часы работы: » + BeginWorkHour + » — » + EndWorkHour;
//colNotTrade = Lime;
Indication («MagicNumber»     ,0,5,40 ,  «» +txtNotTrade+»»,FontSize,»Tahoma»,colNotTrade);
}
12:20 3. В модуль start() добавлен код
if ( OnlyCommentNotTrade == 1 ) return(0); // 1 — только комментарии на графике без открытия позиций, 0 — реальная торговля

Изменения версии 1.17   2013 05 19 (воскресенье)

Show »

09:03 Добавлена проверка на наличие открытых ордеров, прежде чем выводить сообщение, если  CloseAllOrders = TRUE
if ( iCountWorkingOrdersLong != 0 || iCountWorkingOrdersShort != 0 ) // 2013 05 19

Изменения версии 1.17   2013 05 23 (четверг)

Show »

#define AccountNameReal14   «Перехрест Виталий Владимирович»   // 2013 05 23
#define AccountNumberReal31 3546431                //  InstaForex-Cent2.com

Изменения версии 1.17   2013 06 02 (воскресенье)

Show »

#define AccountNumberReal32 430811                // TradeFort-real

Изменения версии 1.17   2013 06 05 (среда)

Show »

09:10 1. В функцию fCloseAllOpenOrders() добавлена строка, для того, чтобы после закрытия всех ордеров при включенном параметре
CloseAllOrders = TRUE этот режим отключался
if ( CloseAllOrders == TRUE ) CloseAllOrders = FALSE; // 2013 06 05
09:16 2. Добавлен параметр:
extern bool    WorkByBars           = FALSE;      // 0 — работа по тикам, 1 — работа по ценам закрытия баров
09:18 3. В модуль Start добавлен код:
if ( WorkByBars == TRUE ) — режим работы по ценам закрытия баров на текущем ТФ
{  if (iTime0 == Time[0]) return (0);
iTime0 = Time[0]; }

Изменения версии 1.17   2013 06 23 (воскресенье)

Show »

19:30 Добавлена индикация:
string txtWorkByBars = «Work By Ticks»;
if ( WorkByBars == TRUE ) // режим работы по ценам закрытия баров на текущем ТФ
txtWorkByBars = «Work By Bars » + strTimeFrame(0);
Indication («WorkByBars»     ,1,2,iStr, «» +txtWorkByBars    +»»,FontSize,»Tahoma»,colAccount);

01:53
#define AccountNameReal15    «Shevelev Andrei Borisovich» // 2013 06 23
#define AccountNumberReal33 911125              // Roboforex procent 2013 06 23

Изменения версии 1.17   2013 06 28 (пятница)

Show »

11:31 Добавлена индикация при выключенном советнике:
if ( OnlyCommentNotTrade == 1 ) {fShowComments();

Изменения версии 1.18 2013 07 12 (пятница)

Show »

Изменения от Алексея Гайворонского (пауза для сигналов по МА):
1. Добавлены параметры
extern bool UseSignal_PauseMA = TRUE; // использовать паузу для смены сигналы по МА
extern bool PauseMA_AllSignal = TRUE; // использовать паузу для обоих сигналов BUY и SELL
extern bool PauseMA_Comment = FALSE; // использовать паузу комментарии на рабочем столе
extern int TimePauseMA = 15; // Период времени для паузы между изменениями тайм фрейма
2. В функцию void CheckSignals_MA() добавлен код:
// использование паузы для смены тренда по времени TimePauseMA для МА iOrderTypeMA
if(UseSignal_PauseMA==TRUE){
int totalbuy,totalsell,iOrderTypeMA_OLD;
iOrderTypeMA_OLD=iOrderTypeMA;
// Счетчик ордеров на BUY и на SELL
for(int i=OrdersTotal()-1; i>=0; i—){
OrderSelect(i, SELECT_BY_POS);
if ( OrderType() == OP_BUY ) { totalbuy ++; continue;}
if ( OrderType() == OP_SELL ) { totalsell++; continue;}}
// если есть ордера на BUY или на SELL выставляем флаги для таймпаузы
if(OrdersTotal() != 0){
// если есть BUY
if(totalbuy>=1 && iOrderPauseBUY == 0 )iOrderPauseBUY=1;
if(PauseMA_AllSignal == TRUE)iOrderTypeMA=-2;
else {
//Print(«1 тут надо чета думать iOrderPauseMA=»+iOrderPauseMA);
}
// если есть SELL
if(totalsell>=1 && iOrderPauseSELL == 0 )iOrderPauseSELL=1;
if(PauseMA_AllSignal == TRUE)iOrderTypeMA=-2;
else {
//Print(«2 тут надо чета думать iOrderPauseMA=»+iOrderPauseMA);
}
}
// закрылись ордера BUY начинаем включать ПАУЗУ по TimePauseMA
if(totalbuy == 0 && iOrderPauseBUY==1 && TimeCloseBUY == 0){TimeCloseBUY=TimeCurrent()+TimePauseMA*60; iOrderTypeMA=-2;} //Запоменаем время после закрытия ордеров и прибавляем к нему TimePauseMA TimeCloseBUY
// сравниваем время сервера и запомненое время с локальным от сервера и обнуляем параметры для ордеров BUY
if(TimeCurrent()>=TimeCloseBUY && totalbuy==0 && iOrderPauseBUY == 1){TimeCloseBUY=0; iOrderTypeMA=-1; iOrderPauseBUY=0;}
// закрылись ордера SELL начинаем включать ПАУЗУ по TimePauseMA
if(totalsell == 0 && iOrderPauseSELL==1 && TimeCloseSELL == 0){TimeCloseSELL=TimeCurrent()+TimePauseMA*60; iOrderTypeMA=-2;} //Запоменаем время после закрытия ордеров и прибавляем к нему TimePauseMA TimeCloseSELL
// сравниваем время сервера и запомненое время с локальным от сервера и обнуляем параметры для ордеров SELL
if(TimeCurrent()>=TimeCloseSELL && totalsell==0 && iOrderPauseSELL == 1){TimeCloseSELL=0; iOrderTypeMA=-1;iOrderPauseSELL=0;}
// держим сигнал SLEEP
if(iOrderPauseBUY==1 && totalbuy==0){iOrderTypeMA=-2;}
if(iOrderPauseSELL==1 && totalsell==0){iOrderTypeMA=-2;}
if(PauseMA_Comment == TRUE)
Comment(«n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»,»n»
,»n»,»PauseMA_AllSignal=»+PauseMA_AllSignal
,»n»
,»n»,»BUY=»+totalbuy
,»n»,»SELL=»+totalsell
,»n»
,»n»,»iOrderTypeMA =»+iOrderTypeMA
,»n»,»MA_OLD=»+iOrderTypeMA_OLD
,»n»
,»n»,»iOrderPauseBUY=»+iOrderPauseBUY
,»n»,»iOrderPauseSELL=»+iOrderPauseSELL
,»n»
,»n»,»TimePauseMA=»+TimePauseMA
,»n»,»TimeCloseBUY=»+TimeToStr(TimeCloseBUY,TIME_MINUTES)
,»n»,»TimeCloseSELL=»+TimeToStr(TimeCloseSELL,TIME_MINUTES)
,»n»,»TimeCurrent =» +TimeToStr(TimeCurrent(),TIME_MINUTES)
);
}
3. Добавлены переменные:
double dblCurrent_drawdown; // Текущая просадка % — вынес в глобальные переменные
double dblMax_drawdownLong = 0; //`Максимальная просадка % LONG
double dblMax_drawdownShort = 0; //`Миниимальная просадка % SHORT
double dblCountOpenTradesLongMax=0; //`Максимальное количество ордеров LONG
double dblCountOpenTradesShortMax=0;//`Максимальное количество ордеров SHORT
double dblSum_lotMaxLong = 0; //`Максимальный размер открытых позиций LONG
double dblSum_lotMaxShort = 0; //`Максимальный размер открытых позиций SHORT
datetime dateMax_drawdownLong; // Дата и время максимальной просадки LONG
datetime dateMax_drawdownShort; // Дата и время максимальной просадки SHORT
bool FlagLockPositionLong = FALSE; // TRUE — открыта локирующая позиция в БАЙ
bool FlagLockPositionShort = FALSE; // TRUE — открыта локирующая позиция в СЕЛ
int iTicketLongLock = 0; // Номер ордера открытой локирующей позиции в БАЙ
int iTicketShortLock = 0; // Номер ордера открытой локирующей позиции в СЕЛ
4. Добавлен расчет максимальной просадки
if ( dblCurrent_drawdown > dblMax_drawdownLong && dblCountOpenTradesLong > dblCountOpenTradesShort ) // Если текущая просадка превышает максимальную LONG
{
dateMax_drawdownLong = TimeCurrent(); // Дата и время максимальной просадка LONG
dblMax_drawdownLong = dblCurrent_drawdown; //`Максимальная просадка % LONG
if ( dblCountOpenTradesLong > dblCountOpenTradesLongMax ) dblCountOpenTradesLongMax = dblCountOpenTradesLong; //`Максимальное количество ордеров LONG
if ( dblAbsSum_lot > dblSum_lotMaxLong ) dblSum_lotMaxLong = dblAbsSum_lot; //`Максимальный размер открытых позиций
}
if ( dblCurrent_drawdown > dblMax_drawdownShort && dblCountOpenTradesLong < dblCountOpenTradesShort ) // Если текущая просадка превышает максимальную SHORT
{
dateMax_drawdownShort = TimeCurrent(); // Дата и время максимальной просадк SHORT
dblMax_drawdownShort = dblCurrent_drawdown; //`Максимальная просадка % SHORT
if ( dblCountOpenTradesShort > dblCountOpenTradesShortMax ) dblCountOpenTradesShortMax = dblCountOpenTradesShort; //`Максимальное количество ордеров SHORT
if ( dblAbsSum_lot > dblSum_lotMaxShort ) dblSum_lotMaxShort = dblAbsSum_lot; //`Максимальный размер открытых позиций
}
5. Добавлена индикация максимальной просадки
string txtDrawDownMaxLong = «»;
txtDrawDownMaxLong = txtDrawDownMaxLong + » Max DD » + DoubleToStr(dblMax_drawdownLong,2)+» % «;
txtDrawDownMaxLong = txtDrawDownMaxLong + » Long » + DoubleToStr(dblCountOpenTradesLongMax,0);
txtDrawDownMaxLong = txtDrawDownMaxLong + » ( » + DoubleToStr(dblSum_lotMaxLong,2) + » ) «;
txtDrawDownMaxLong = txtDrawDownMaxLong + TimeToStr(dateMax_drawdownLong,TIME_DATE);
txtDrawDownMaxLong = txtDrawDownMaxLong + » » + TimeToStr(dateMax_drawdownLong,TIME_MINUTES);
Indication («DrawDownMaxLong» ,3,5,iStr , «» +txtDrawDownMaxLong+»»,FontSize+1,»Tahoma»,ColorDrawDownMax);
iStr = iStr + iStrStep*1.1;
string txtDrawDownMaxShort = «»;
txtDrawDownMaxShort = txtDrawDownMaxShort + » Max DD » + DoubleToStr(dblMax_drawdownShort,2)+» % «;
txtDrawDownMaxShort = txtDrawDownMaxShort + » Short » + DoubleToStr(dblCountOpenTradesShortMax,0);
txtDrawDownMaxShort = txtDrawDownMaxShort + » ( » + DoubleToStr(dblSum_lotMaxShort,2) + » ) «;
txtDrawDownMaxShort = txtDrawDownMaxShort + TimeToStr(dateMax_drawdownShort,TIME_DATE);
txtDrawDownMaxShort = txtDrawDownMaxShort + » » + TimeToStr(dateMax_drawdownShort,TIME_MINUTES);
Indication («DrawDownMaxShort» ,3,5,iStr , «» +txtDrawDownMaxShort+»»,FontSize+1,»Tahoma»,ColorDrawDownMax);
iStr = iStr + iStrStep*1.1;
6. 11:21 Добавлен параметр
extern double MultiLotsFactorExp = 1.05 // К-т увеличения лота следующих колен
В функции fGetNextLot исправлена строка
dblNextLot = NormalizeDouble(dblMinLot * MathPow(MultiLotsFactor * MultiLotsFactorExp, iWorkStep), dblLotDecimal); // 2013 07 12
7. 11:56 Добавлены параметры
extern int iOpenLockPosition = 0; // 1 — Открыть локирующую позицию, если изменился сигнал, 0 — не открывать
extern double dKoeffLockPosition = 1; // Коэффициент повышения локирующей позиции
extern double StopLossLock=40; // Уровень СЛ для локирующих позиций
extern double TakeProfitLock=30; // Уровень ТП для локирующих позиций
8. В функцию Start() добавлен код локирования позиций при превышении максимальной просадки:
if ( OpenLockPosition == TRUE ) // Встаем в лок
{
if ( OrderSelect( iTicketShortLock, SELECT_BY_TICKET, MODE_HISTORY ) == TRUE )
{ if ( Bid — dblLastOpenPriceLockShort >= iMulpiply5Digits * StepOrders * Point )
{ FlagLockPositionShort = FALSE; iTicketShortLock = 0; } }
if ( OrderSelect( iTicketLongLock, SELECT_BY_TICKET, MODE_HISTORY ) == TRUE )
{ if ( Point * StepOrders * iMulpiply5Digits <= dblLastOpenPriceLockLong — Ask )
{ FlagLockPositionLong = FALSE; iTicketLongLock = 0;}}
if ( OrderSelect( iTicketShortLock, SELECT_BY_TICKET, MODE_TRADES ) == TRUE ) FlagLockPositionShort = TRUE; // TRUE — открыта локирующая позиция
if ( OrderSelect( iTicketLongLock, SELECT_BY_TICKET, MODE_TRADES ) == TRUE ) FlagLockPositionLong = TRUE; // TRUE — открыта локирующая позиция
double dLotsLock = NormalizeDouble( (dblSumOrderLotsLong — dblSumOrderLotsShort) * dKoeffLockPosition , dblLotDecimal);
if ( dblCurrent_drawdown > SafeEquityRisk ) // Если текущая просадка превышает заданную в настройках — открывается локирующая позиция
{
if ( dLotsLock > 0 ) // Если Сумма лотов позиций в БАЙ превышает в СЕЛ — открываем локирующую позицию в СЕЛ
{
if ( iCountWorkingOrdersLong > iCountWorkingOrdersShort )
{
TradeComment = Version + » » + Symbol() + » Short LOCK » + MagicNumberShort + «-» + iWorkStepShort;
if ( FlagLockPositionShort == FALSE )
//if ( OrderSelect( iTicketShortLock, SELECT_BY_TICKET, MODE_TRADES ) == FALSE )
{
iTicketShortLock = fOpenOrder(OP_SELL, dLotsLock, Slippage, StopLossLock, 0, TradeComment, MagicNumberShort, 0, HotPink);
Print( TradeComment, » «, dLotsLock );
if ( OrderSelect( iTicketShortLock, SELECT_BY_TICKET, MODE_TRADES ) == TRUE ) dblLastOpenPriceLockShort = OrderOpenPrice();
FlagLockPositionShort = TRUE; // TRUE — открыта локирующая позиция
}
}
}
else
if ( dLotsLock < 0 ) // Если Сумма лотов позиций в БАЙ меньше чем в СЕЛ — открываем локирующую позицию в БАЙ
{
if ( iCountWorkingOrdersLong < iCountWorkingOrdersShort )
{
dLotsLock = -dLotsLock;
TradeComment = Version + » » + Symbol() + » Long LOCK » + MagicNumberLong + «-» + iWorkStepLong;
if ( FlagLockPositionLong == FALSE )
//if ( ( iTicketLongLock == 0 ) && ( OrderSelect( iTicketLongLock, SELECT_BY_TICKET, MODE_TRADES ) == FALSE ) )
{
iTicketLongLock = fOpenOrder(OP_BUY, dLotsLock, Slippage, StopLossLock, 0, TradeComment, MagicNumberLong, 0, Lime);
Print( TradeComment, » «, dLotsLock );
if ( OrderSelect( iTicketLongLock, SELECT_BY_TICKET, MODE_TRADES ) == TRUE ) dblLastOpenPriceLockLong = OrderOpenPrice();
FlagLockPositionLong = TRUE; // TRUE — открыта локирующая позиция
}
}
}
}
}

Изменения версии 1.18 2013 07 16 (вторник)

Show »

1. Добавлена индикация локирования
string txtOpenLockPosition = «Lock Position: OFF»;
if ( OpenLockPosition == TRUE ) // Встаем в лок
{ txtOpenLockPosition = «Lock Position: DD= » + DoubleToStr(SafeEquityRisk,0) + » % K-t » + DoubleToStr(dKoeffLockPosition,1);
txtOpenLockPosition = txtOpenLockPosition + » SL= » + DoubleToStr(StopLossLock,0);
iStr = iStr + iStrStep;
Indication («OpenLockPosition» ,2,5,iStr , «»+txtOpenLockPosition+»»,FontSize,»Tahoma»,ColorText); }

Изменения версии 1.19   2013 09 23 (понедельник)

Show »

1. Добавлены переменные
double dMaxPrice_buy = 0;
double dMinPrice_buy = 0;
double dMaxPrice_buyLimit = 0;
double dMinPrice_buyLimit = 0;
double dMaxPrice_buyStop = 0;
double dMinPrice_buyStop = 0;
double dMaxPrice_sell = 0;
double dMinPrice_sell = 0;
double dMaxPrice_sellLimit = 0;
double dMinPrice_sellLimit = 0;
double dMaxPrice_sellStop = 0;
double dMinPrice_sellStop = 0;
2. Добавлен расчет и индикация диапазонов отложенных ордеров
if (dMinPrice_buyLimit == 0 ) dMinPrice_buyLimit = OrderOpenPrice();
if (dMaxPrice_buyLimit == 0 ) dMaxPrice_buyLimit = OrderOpenPrice();
if (dMinPrice_buyLimit > OrderOpenPrice() ) dMinPrice_buyLimit = OrderOpenPrice();
if (dMaxPrice_buyLimit < OrderOpenPrice() ) dMaxPrice_buyLimit = OrderOpenPrice();
txtOrdersBUYLimit = txtOrdersBUYLimit
+ «BL » + iOrders_buyLimit
+  »  ( » + DoubleToStr(dblLots_buyLimit,2) + » )»
+ »  » + DoubleToStr(dMinPrice_buyLimit,Digits)
+ » — » + DoubleToStr(dMaxPrice_buyLimit,Digits);
3. Убрана индикация максимально просадки, если выключен параметр OpenLockPosition = FALSE
4. Уменьшен шрифт параметров советника в левом нижнем углу

Изменения версии 1.19   2013 09 26 (четверг)

Show »

22:38 1.Сделал расчет и индикацию реального уровня маржи с учетом бонусов:
//>>2013 09 26 : РУМ = (Эквити – Кредит ) / (Эквити – Свободная маржа) * 100%
double dblRUM = ( AccountEquity() —  AccountCredit() ) / ( AccountEquity() — AccountFreeMargin() )  * 100;
string txtRUM =  » Real Free Margin » + DoubleToStr( dblRUM, 2);
color ColorRUM = ColorText;
int    FontSizeRUM = FontSize;
if ( UseChangeColors == TRUE )
{
if (dblRUM < 50)                   { ColorRUM = Red;        FontSizeRUM = FontSize+10; }
if (dblRUM >= 50 && dblRUM < 80)   { ColorRUM = Crimson;    FontSizeRUM = FontSize+8; }
if (dblRUM >= 80 && dblRUM < 120)  { ColorRUM = OrangeRed;  FontSizeRUM = FontSize+6; }
if (dblRUM >= 120 && dblRUM < 200) { ColorRUM = Gold;       FontSizeRUM = FontSize+4; }
if (dblRUM >= 200 && dblRUM < 250) { ColorRUM = Yellow;     FontSizeRUM = FontSize+2; }
if (dblRUM >= 250 && dblRUM < 300) { ColorRUM = Bisque;     FontSizeRUM = FontSize+1; }
if (dblRUM > 300)                  { ColorRUM = Lime;       FontSizeRUM = FontSize;   }
}
iStr = iStr + iStrStep + 3;
Indication («RUM»,3,5,iStr  ,  «» +txtRUM+» %»,FontSizeRUM,»Tahoma»,ColorRUM);
01:03 2.Исправил индикацию просадки по % (изменение размера шрифта и цвет)
int    FontSizeDrawDown = FontSize;
if ( UseChangeColors == TRUE )
{
if (dblCurrent_drawdown > 85)                              { ColorDrawDown = Red;        FontSizeDrawDown = FontSize+6; }
if (dblCurrent_drawdown > 70 && dblCurrent_drawdown <= 85) { ColorDrawDown = Crimson;    FontSizeDrawDown = FontSize+5; }
if (dblCurrent_drawdown > 55 && dblCurrent_drawdown <= 70) { ColorDrawDown = OrangeRed;  FontSizeDrawDown = FontSize+4; }
if (dblCurrent_drawdown > 30 && dblCurrent_drawdown <= 55) { ColorDrawDown = Gold;       FontSizeDrawDown = FontSize+3; }
if (dblCurrent_drawdown > 20 && dblCurrent_drawdown <= 30) { ColorDrawDown = Yellow;     FontSizeDrawDown = FontSize+2; }
if (dblCurrent_drawdown > 10 && dblCurrent_drawdown <= 20) { ColorDrawDown = Bisque;     FontSizeDrawDown = FontSize+1; }
if (dblCurrent_drawdown < 10)                              { ColorDrawDown = Lime;       FontSizeDrawDown = FontSize;   }
01:55 3.Исправил индикацию п. до стопаута (изменение размера шрифта)
int    FontSizePipsBeforeStopOut = FontSize;
if ( iMulpiply5Digits == 10 ) iPipsBeforeStopOut = iPipsBeforeStopOut/iMulpiply5Digits;
if (iPipsBeforeStopOut < 50)                               { FontSizePipsBeforeStopOut = FontSize+6; }
if (iPipsBeforeStopOut >= 50 && iPipsBeforeStopOut < 100)  { FontSizePipsBeforeStopOut = FontSize+4; }
if (iPipsBeforeStopOut >= 100 && iPipsBeforeStopOut < 150) { FontSizePipsBeforeStopOut = FontSize+3; }
if (iPipsBeforeStopOut >= 150 && iPipsBeforeStopOut < 200) { FontSizePipsBeforeStopOut = FontSize+2; }
if (iPipsBeforeStopOut >= 200 && iPipsBeforeStopOut < 300) { FontSizePipsBeforeStopOut = FontSize+1; }
if (iPipsBeforeStopOut >= 300 && iPipsBeforeStopOut < 400) { FontSizePipsBeforeStopOut = FontSize; }
if (iPipsBeforeStopOut >= 400 )                            { FontSizePipsBeforeStopOut = FontSize; }
Indication («PipsBeforeStopOut»,3,20,iStr,»»+strPipsBeforeStopOut+»»  ,FontSizePipsBeforeStopOut,»Tahoma»,colorPipsBeforeStopOut);     

Изменения версии 1.19   2013 09 27 (пятница)

Show »

13:02 1. Добавлены переменные и расчет максимального размера убытка в одной сделке:
double dblMaxLoss_buy = 0;
double dblMaxLossPercent_buy = 0;
double dblMaxLossPips_buy = 0;
int    iTicketMaxLoss_buy  = 0;
double dblMaxLoss_sell = 0;
double dblMaxLossPercent_sell = 0;
double dblMaxLossPips_sell = 0;
int    iTicketMaxLoss_sell  = 0;
if (dblMaxLoss_buy == 0 )
{
dblMaxLoss_buy = OrderProfit()+OrderSwap()+OrderCommission();
dblMaxLossPercent_buy = dblMaxLoss_buy / AccountBalance() * 100;
dblMaxLossPips_buy = (-Bid + OrderOpenPrice() ) * 1;
iTicketMaxLoss_buy  = OrderTicket();
}
if (dblMaxLoss_buy > OrderProfit()+OrderSwap()+OrderCommission() )
{
dblMaxLoss_buy = OrderProfit()+OrderSwap()+OrderCommission();
dblMaxLossPercent_buy = dblMaxLoss_buy / AccountBalance() * 100;
dblMaxLossPips_buy = (-Bid + OrderOpenPrice() ) * 1;
iTicketMaxLoss_buy  = OrderTicket();
}
15:28 2. Добавлена индикация максимального размера убытка в одной сделке:
string txtMaxLoss_buy =  «Max Loss Long  «;
//txtMaxLoss_buy =  txtMaxLoss_buy +  iTicketMaxLoss_buy + »  «;
txtMaxLoss_buy =  txtMaxLoss_buy +  DoubleToStr(dblMaxLoss_buy,2)  + «$  » + DoubleToStr(dblMaxLossPercent_buy,2)  + » %»;
//txtMaxLoss_buy =  txtMaxLoss_buy + DoubleToStr(dblMaxLossPips_buy,5)  + » p «;
color colMaxLoss_buy =  ColorText;
int  FontSizeMaxLoss_buy = FontSize;
if ( UseChangeColors == TRUE )
{
if (dblMaxLossPercent_buy < -5)                                   { colMaxLoss_buy = Red;        FontSizeMaxLoss_buy = FontSize+8; }
if (dblMaxLossPercent_buy >= -5   && dblMaxLossPercent_buy < -3)  { colMaxLoss_buy = Crimson;    FontSizeMaxLoss_buy = FontSize+6; }
if (dblMaxLossPercent_buy >= -3   && dblMaxLossPercent_buy < -2)  { colMaxLoss_buy = OrangeRed;  FontSizeMaxLoss_buy = FontSize+4; }
if (dblMaxLossPercent_buy >= -2   && dblMaxLossPercent_buy < -1.5){ colMaxLoss_buy = Gold;       FontSizeMaxLoss_buy = FontSize+2; }
if (dblMaxLossPercent_buy >= -1.5 && dblMaxLossPercent_buy < -1)  { colMaxLoss_buy = Yellow;     FontSizeMaxLoss_buy = FontSize+1; }
if (dblMaxLossPercent_buy >= -1   && dblMaxLossPercent_buy < -0.5){ colMaxLoss_buy = Bisque;     FontSizeMaxLoss_buy = FontSize;   }
if (dblMaxLossPercent_buy > -0.5)                                 { colMaxLoss_buy = ColorText;  FontSizeMaxLoss_buy = FontSize;   }
}
string txtMaxLoss_sell =  «Max Loss Short «;
//txtMaxLoss_sell =  txtMaxLoss_sell +  iTicketMaxLoss_sell + »  «;
txtMaxLoss_sell =  txtMaxLoss_sell +  DoubleToStr(dblMaxLoss_sell,2)  + «$  » + DoubleToStr(dblMaxLossPercent_sell,2)  + » %»;
//txtMaxLoss_sell =  txtMaxLoss_sell + DoubleToStr(dblMaxLossPips_sell,5)  + » p «;
color colMaxLoss_sell = ColorText;
int  FontSizeMaxLoss_sell = FontSize;
if ( UseChangeColors == TRUE )
{
if (dblMaxLossPercent_sell < -5)                                    { colMaxLoss_sell = Red;        FontSizeMaxLoss_sell = FontSize+8; }
if (dblMaxLossPercent_sell >= -5   && dblMaxLossPercent_sell < -3)  { colMaxLoss_sell = Crimson;    FontSizeMaxLoss_sell = FontSize+6; }
if (dblMaxLossPercent_sell >= -3   && dblMaxLossPercent_sell < -2)  { colMaxLoss_sell = OrangeRed;  FontSizeMaxLoss_sell = FontSize+4; }
if (dblMaxLossPercent_sell >= -2   && dblMaxLossPercent_sell < -1.5){ colMaxLoss_sell = Gold;       FontSizeMaxLoss_sell = FontSize+2; }
if (dblMaxLossPercent_sell >= -1.5 && dblMaxLossPercent_sell < -1)  { colMaxLoss_sell = Yellow;     FontSizeMaxLoss_sell = FontSize+1; }
if (dblMaxLossPercent_sell >= -1   && dblMaxLossPercent_sell < -0.5){ colMaxLoss_sell = Bisque;     FontSizeMaxLoss_sell = FontSize;   }
if (dblMaxLossPercent_sell > -0.5)                                  { colMaxLoss_sell = ColorText;  FontSizeMaxLoss_sell = FontSize;   }
}
Indication («MaxLoss_sell»,3,5,iStr ,   txtMaxLoss_sell+»»,FontSizeMaxLoss_sell,»Tahoma»,colMaxLoss_sell);
iStr = iStr + iStrStep;
Indication («MaxLoss_buy»,3,5,iStr  ,   txtMaxLoss_buy+»»,FontSizeMaxLoss_buy,»Tahoma»,colMaxLoss_buy);

Изменения версии 1.19   2013 10 12 (суббота)

Show »

09:11 1. При включенном параметре   if ( OnlyCommentNotTrade == 1 )   сделано чтобы работала индикация  fShowComments();
09:44 2. #define AccountNumberReal34 1600893             // Alpari  2013 10 12

Изменения версии 1.19   2014 01 21 (вторник)

Show »

#define AccountNameReal17    «kin khuen ng»  // 2014 01 21
#define AccountNumberReal35 56911             // thinkforex.com.au  2014 01 21
#define AccountNameReal17    «Kin Khuen Ng #12»  // 2014 03 03
#define AccountNumberReal35 429279             // Axitrader    2014 03 03

 Изменения версии 1.20   2014 03 09 (воскресенье) — Переход на 600 билд

Show »

1. В модуле init вместо switch — выдавалась ощибка компиляции
if ( MarketInfo(Symbol(), MODE_MINLOT) == 0.001 ) dblLotDecimal = 3;
if ( MarketInfo(Symbol(), MODE_MINLOT) == 0.01 ) dblLotDecimal = 2;
if ( MarketInfo(Symbol(), MODE_MINLOT) == 0.1 ) dblLotDecimal = 1;
if ( MarketInfo(Symbol(), MODE_MINLOT) == 1 ) dblLotDecimal = 0;
2. Вместо параметра StepOrders добавлены 2 параметра:
extern double  StepOrdersLong       = 15.0;       // Шаг ордеров лонг
extern double  StepOrdersShort      = 40.0;       // Шаг ордеров шорт
3. Добавлены параметры
extern bool    CloseByMaxLoss = TRUE;             // Если TRUE — закрываем позиции, у которых  % убытка по позиции > dMaxLossByTransaction
extern double  dMaxLossByTransaction = 2.5;       // Максимальный % убытка по позиции, после которого любая убыточная позиция закрывается если CloseByMaxLoss == 1
Добавлена функция
void CloseOpenOrdersByMaxLosses( int iOrderType )   //iOrderType = -1 — not Initialized (все ордера), 0 — BUY, 1 — SELL
4. Максимальный размер лосей считаетcя от эквити а не от баланса
dblMaxLossPercent_buy = dblMaxLoss_buy / AccountEquity() * 100;
dblMaxLossPercent_sell = dblMaxLoss_sell / AccountEquity() * 100;
5. Вместо параметра MultiLotsFactor добавлены 2 параметра:
extern double  MultiLotsFactorLong  = 1.3;        // К-т увеличения лота лонг
extern double  MultiLotsFactorShort = 1.1;        // К-т увеличения лота шорт

 Изменения версии 1.21   2014 05 25 (воскресенье)

Show »

1. Добавлен параметр extern double  PointsMTP=7; // Количество пунктов, меньше которого, лок не будет закрываться в минус
2. В функцию   CloseOpenOrdersByMaxLosses( int iOrderType ) добавлен код:
if ( OrderType() == OP_BUY ) dLossByPosition = OrderOpenPrice()-Ask;
if ( OrderType() == OP_SELL ) dLossByPosition = Bid — OrderOpenPrice();
Print(«dLossByPosition= «, dLossByPosition, » PointsMTP * Point * iMulpiply5Digits= «, PointsMTP * Point * iMulpiply5Digits);
if ( dLossByPosition >= PointsMTP * Point * iMulpiply5Digits )
3. Индикация отложенных ордеров сделана как в версии 1.19

 Изменения версии 1.22   2015 01 14 (среда)

Show »

20:34 1. Исправил индикацию срабатывания локов

   txtOpenLockPosition  = «Lock Position:  DD= » + DoubleToStr(SafeEquityRisk,0) + «/» + DoubleToStr(SafeEquityRiskMax,0) + «%  K-t=» + DoubleToStr(dKoeffLockPosition,1)+» SL=» + DoubleToStr(StopLossLock,0);
20:36 2. Перенес параметры локирования в начало кода
20:51 3. Убрал несущественные параметры внутрь кода
21:37 4. Добавил параметр
extern double  StopLossLockByTrend = 40;          // Уровень СЛ для локирующих позиций по тренду
21:57 5. Открытие локов поставил в начало цикла, перед расчетом средней цены и модификацией ТП
а то много времени тратилось на открытие локов (сначала модифицировались ТП по открытым позициям)


 Изменения версии 1.22   2015 01 17 (суббота)

Show »

10:30 1. #define AccountNumberReal0  3025122             // Forex4you ESN Cent4  (No Swap) 2015 01 17
10:47 2. Поправил индикацию параметров сократил надписи, убрал лишние, выделил TS, Lock DD, MaxLoss)
11:20 3. Убрал индикацию последней локирующей позиции, если ее нет
17:31 4. Добавил параметр  extern bool    TrailOneTrade     = TRUE; // TRUE — Будет тралиться каждая сделка при выходе в плюс, независимо от общего результата по открытым позициям
в функции fModifyOrder()   // сделал тралы по каждой сделке отдельно а не в пакете
if ( TrailOneTrade == TRUE )
iAverageOpenPrice = NormalizeDouble((Bid — OrderOpenPrice()) / Point / iMulpiply5Digits, 0);
else
iAverageOpenPrice = NormalizeDouble((Bid — dblAverageOpenPrice) / Point / iMulpiply5Digits, 0);
17:42 5. Добавил переменные и индикацию
double  dblLastLotLockLong = 0 ;        //Последний объем открытой локирующей позиции LONG
double  dblLastLotLockShort = 0;        //Последний объем открытой локирующей позиции SHORT
17:53 6. Добавил переменные и индикацию
double  dblLastDrawDownLockLong = 0 ;   //Просадка при срабатывании локирующей позиции LONG
double  dblLastDrawDownLockShort = 0 ;  //Просадка при срабатывании локирующей позиции SHORT
double  dblSafeEquityRisk    = SafeEquityRisk;      // Максимальный дродаун Эквити в % от Баланса, для срабатывания лока
double  dblSafeEquityRiskMax = SafeEquityRiskMax;   // Максимальный дродаун Эквити в % от Баланса, при котором лок открывается в любом случае
double  dblDeltaLock = DeltaLock;
bool    FlagChangeSERMLockPositionLong = FALSE;   // TRUE — нашли в истории локирующую позицию и изменили параметр dblSafeEquityRiskMax
bool    FlagChangeSERMLockPositionShort = FALSE;  // TRUE — нашли в истории локирующую позицию и изменили параметр dblSafeEquityRiskMax
18:32 7. Добавил параметр  extern double  DeltaLock = 5;  // % отклонения, на который увеличивается параметр SafeEquityRiskMax при срабатывании лока
19:55 8. Добавил обработку изменения dblSafeEquityRisk, dblSafeEquityRiskMax после закрытия локирующей позиции
if ( FlagChangeSERMLockPositionShort == FALSE )  // TRUE — нашли в истории локирующую позицию и изменили параметр dblSafeEquityRiskMax   {
dblLastDrawDownLockShort = MathMax((AccountBalance()-AccountEquity())/(AccountBalance()+AccountCredit())*100,0) ;  //2015 01 18 Просадка при срабатывании локирующей позиции SHORT
if ( ChangeDeltaLock == TRUE )            // TRUE — Менять параметр DeltaLock, в зависимости от просадки или нет (постоянная величина)
dblDeltaLock = ( 100 — dblLastDrawDownLockShort )/10;
dblSafeEquityRisk = dblLastDrawDownLockShort — dblDeltaLock;
dblSafeEquityRiskMax = dblLastDrawDownLockShort + dblDeltaLock; // % отклонения, на который увеличивается параметр SafeEquityRiskMax при срабатывании лока
if ( dblSafeEquityRisk < SafeEquityRisk ) dblSafeEquityRisk = SafeEquityRisk;
if ( dblSafeEquityRiskMax < SafeEquityRiskMax ) dblSafeEquityRiskMax = SafeEquityRiskMax;
FlagChangeSERMLockPositionShort = TRUE;    }
20:13 9. Стопы по локам по тренду другие
if ( iOrderTypeMA  == OP_SELL  ) dStopLossLock = StopLossLockByTrend; // 2015 01 18 Если тренд вниз
20:54 10. Добавил параметр  extern bool    ChangeDeltaLock = TRUE;  // TRUE — Менять параметр DeltaLock, в зависимости от просадки или нет (постоянная величина)
if ( ChangeDeltaLock == TRUE )            // TRUE — Менять параметр DeltaLock, в зависимости от просадки или нет (постоянная величина)
dblDeltaLock = ( 100 — dblLastDrawDownLockShort )/10;
21:42 11. Исправил индикацию P/L по периодам !!! (точки вместо тире)
d6=StrToTime(TimeYear(TimeCurrent())+».»+IntegerToString(Month())+».01″);
d8=StrToTime(IntegerToString(Year(),4)+».01.01″);

Изменения версии 1.22   2015 01 18 (воскресенье)

Show »

10:20 1. Убрал проверки на повторное открытие локов по параметру SafeEquityRisk, т.к. он раньше не менялся

//if (  Bid — dblLastOpenPriceLockShort >= iMulpiply5Digits * dStepOrdersShort * Point )
//if ( Point * dStepOrdersLong * iMulpiply5Digits <= dblLastOpenPriceLockLong — Ask )
10:57 2. При включенном параметре
if ( TrailOneTrade == TRUE ) iAverageOpenPrice = NormalizeDouble((OrderOpenPrice() — Ask) / Point / iMulpiply5Digits, 0);
else iAverageOpenPrice = NormalizeDouble((dblAverageOpenPrice — Ask) / Point / iMulpiply5Digits, 0);
if ( TrailOneTrade == TRUE ) iAverageOpenPrice = NormalizeDouble((Bid — OrderOpenPrice()) / Point / iMulpiply5Digits, 0);
else  iAverageOpenPrice = NormalizeDouble((Bid — dblAverageOpenPrice) / Point / iMulpiply5Digits, 0);

12:00 3. Добавлен параметр extern bool    TrailOnlyLock     = TRUE;           // TRUE — Будут тралиться локи независимо от остальных сделок
// Тралятся только локирующие позиции если TrailOneTrade == FALSE и TrailOnlyLock == TRUE
if (( TrailOneTrade == FALSE ) && ( TrailOnlyLock == TRUE ) && ( OrderTicket() == iTicketShortLock )) {
iAverageOpenPrice = NormalizeDouble((OrderOpenPrice() — Ask) / Point / iMulpiply5Digits, 0);
Print(«TralShortLock! Order # «,OrderTicket(),» OrderOpenPrice=», OrderOpenPrice(), » iAverageOpenPrice= «, iAverageOpenPrice);
// Тралятся только локирующие позиции
if ( ( TrailOneTrade == FALSE ) && ( TrailOnlyLock == TRUE ) && ( OrderTicket() == iTicketLongLock )) {
iAverageOpenPrice = NormalizeDouble((Bid — OrderOpenPrice()) / Point / iMulpiply5Digits, 0);
Print(«TralLongLock! Order # «,OrderTicket(),» OrderOpenPrice=», OrderOpenPrice(), » iAverageOpenPrice= «, iAverageOpenPrice);
12:30 4. Добавил индикацию в трал
if ( TrailOneTrade == TRUE )
txtUseTrailing  = txtUseTrailing + »  OneTrade»;
if ( TrailOneTrade == FALSE && TrailOnlyLock == TRUE )
txtUseTrailing  = txtUseTrailing + »  OnlyLock»;

Изменения версии 1.22   2015 01 19 (понедельник)

Show »

06:22 1. Нужно уменьшать параметр dblSafeEquityRisk, если  dblSafeEquityRisk   больше чем реальная просадка на 10-15%

if ( dblSafeEquityRisk > MathMax((AccountBalance()-AccountEquity())/(AccountBalance()+AccountCredit())*100,0) + DeltaLock2 )   {

dblSafeEquityRisk = MathMax((AccountBalance()-AccountEquity())/(AccountBalance()+AccountCredit())*100,0) — DeltaLock2;

dblSafeEquityRiskMax = dblSafeEquityRisk + dblDeltaLock;

if ( dblSafeEquityRisk < SafeEquityRisk ) dblSafeEquityRisk = SafeEquityRisk;

if ( dblSafeEquityRiskMax < SafeEquityRiskMax ) dblSafeEquityRiskMax = SafeEquityRiskMax;    }

08:15 2. Поправил вывод комментов после деинициализации (убрал ненужные + добавил новые)

«; TS=»,UseTrailing,» OneTrade=»,TrailOneTrade,» OnlyLock=»,TrailOnlyLock, » «, DoubleToStr(TrailStart,0) + «/»+ DoubleToStr(TrailStop,0),

«; Lock=»,OpenLockPosition,» DD=» + DoubleToStr(SafeEquityRisk,0) + «/» + DoubleToStr(SafeEquityRiskMax,0) + «% DeltaLock=» + DeltaLock+ «% DeltaLock2=»+DeltaLock2+ «%  K-t=» + DoubleToStr(dKoeffLockPosition,1)+» SL=» + DoubleToStr(StopLossLock,0) + «/» + DoubleToStr(StopLossLockByTrend,0),

«; MaxLoss=»,CloseByMaxLoss,» MLbyT=» + DoubleToStr(dMaxLossByTransaction,0) + «%»

08:31 3. Добавил параметр

extern double  DeltaLock2 = 10;                   // % отклонения реальной просадки от расчетного, на который уменьшается dblSafeEquityRisk

Изменения версии 1.22 2015 01 20 (вторник)

Show »

12:55 1. После срабатывания лока в минус параметр SafeEquityRisk (а не SafeEquityRiskMax) должен меняться таким образом, чтобы он был БОЛЬШЕ текущей просадки на дельту, чтобы новые локи не срабатывали подряд
dblSafeEquityRisk = dblLastDrawDownLockShort + dblDeltaLock; // плюс вместо минуса
dblSafeEquityRiskMax = dblLastDrawDownLockShort + dblDeltaLock*2; // *2
dblSafeEquityRisk = dblLastDrawDownLockLong + dblDeltaLock; // плюс вместо минуса
dblSafeEquityRiskMax = dblLastDrawDownLockLong + dblDeltaLock*2; // *2
13:23 2. для отображения инфы о коле в ЛВ углу
if ( iOrderType == OP_SELL ) { …
dblLastOpenPriceLockShort = OrderOpenPrice();
dblLastLotLockShort = OrderLots();
dblLastDrawDownLockShort = MathMax((AccountBalance()-AccountEquity())/(AccountBalance()+AccountCredit())*100,0) ; //2015 01 17 Просадка при срабатывании локирующей позиции SHORT
if ( iOrderType == OP_BUY ) { …
dblLastOpenPriceLockLong = OrderOpenPrice();
dblLastLotLockLong = OrderLots();
dblLastDrawDownLockLong = MathMax((AccountBalance()-AccountEquity())/(AccountBalance()+AccountCredit())*100,0) ; //2015 01 17 Просадка при срабатывании локирующей позиции SHORT
13:28 3. fShowComments(); //<< Поставил в конец функции Start()
14:26 4. Исправил расчет (везде добавил пересчет dblCurrent_drawdown )
dblCurrent_drawdown = (AccountBalance()+AccountCredit()-AccountEquity())/(AccountBalance()+AccountCredit())*100;
dblLastDrawDownLockLong = dblCurrent_drawdown; //2015 01 20 Просадка при срабатывании локирующей позиции LONG
dblLastDrawDownLockShort = dblCurrent_drawdown; //2015 01 20 Просадка при срабатывании локирующей позиции SHORT

Изменения версии 1.22   2015 01 21 (среда)

Show »

07:55 1. Отображение MLF на экране 2 знака
string txtMultiLotsFactor  = «MLF              L » + DoubleToStr(MultiLotsFactorLong, 2)+ »    S » + DoubleToStr(MultiLotsFactorShort, 2) ;
07:56 2. Вернул параметр и отключил
extern bool    UseSignal_MA      = FALSE;          // использовать сигналы по МА
09:18 3. В функции Start() поставил еще один вызов перед работой локов fShowComments();
13:12 4. Вернул параметр и отключил
extern bool    AutoModifyTP      = FALSE;            // TRUE — Будут модифицироваться ТП после открытия новых или закрытия части позиций руками
13:24 4. Убрал проверку, т.к. она проверяется раньше
//if (lOpenLastOrderLong || AutoModifyTP ) // 13:45 Сделал, чтобы  работало по настройкам
//if (lOpenLastOrderShort || AutoModifyTP ) // 13:45 Сделал, чтобы  работало по настройкам

Изменения версии 1.22   2015 01 22 (четверг)

Show »

13:27 1. Отключил расчет суммы депозитов для увеличения скорости тестирования
13:34 2. Сделал проверку на нулевой депозит при расчете dblCurrent_drawdown
if ( AccountBalance()+AccountCredit() != 0 ) dblCurrent_drawdown = (AccountBalance()+AccountCredit()-AccountEquity())/(AccountBalance()+AccountCredit())*100;
else dblCurrent_drawdown = 0; // 2015 01 22
13:37 3. Параметры по умолчанию (уменьшил Slippage):
MultiLotsFactorLong  = 1.01;
MultiLotsFactorShort = 1.01;
StepOrdersLong       = 5.0;
StepOrdersShort      = 5.0;
Slippage             = 1.0;
Grid_Ratio           = 0.5;
13:50 4. Поправил комменты риска в сделке
txtRisk = txtRisk + «Risk             » + DoubleToStr(MinRisk, 0) +»%»;
//txtRisk = txtRisk + » ( » + DoubleToStr(dblMinLot, 2) + » )»;
txtRisk = txtRisk + » / » + DoubleToStr(MaxRisk, 0) +»%»;
14:05 5. Включил параметр по умолчанию
TrailOneTrade     = TRUE;           // TRUE — Будут тралиться каждая сделка, независимо от общего результата по открытым позициям

Изменения версии 1.22   2015 01 23 (пятница)

Show »

10:59 Вынес в начале функции Start()  чтобы пересчитывались сразу же при работающей торговле
fShowComments(); // 2015 01 23

Изменения версии 1.22   2015 01 24 (суббота)

Show »

00:15 1. В условии работы трала только слоками if (( TrailOneTrade == FALSE ) && ( TrailOnlyLock == TRUE ) && ( OrderTicket() == iTicketShortLock )) {
добавил   else  iAverageOpenPrice = NormalizeDouble((Bid — dblAverageOpenPrice) / Point / iMulpiply5Digits, 0); // 2015 01 23
11:08 2. Добавил индикацию в правом верхнем углу
Indication («AccountNumber2»,1,2,12  ,  «» +txtAccountNumber+»»,FontSize,»Tahoma»,colAccount);// 2015 01 24
if (! IsConnected() )       txtNotTrade = «Not connected to server  «;
else
if ( !IsTradeAllowed() )    txtNotTrade = «Trading not Allowed  «;
if ( IsTradeContextBusy() ) txtNotTrade = txtNotTrade + «Trade Context Busy… «;
if ( !IsExpertEnabled() )   txtNotTrade = txtNotTrade + «Expert Disabled (terminal)»;
else                      { txtNotTrade = txtNotTrade + «Expert Working!»;
colNotTrade = colAccount;      }
Indication («MagicNumber2»  ,1,2,26 ,  «» +txtNotTrade+»»,FontSize,»Tahoma»,colNotTrade);

21:37 3. Попытка заставить работать сетку в сторону тренда в функции fSorcerer поменял местами — стала работать в обе стороны
if ( lWorkingBUY  && dPoint * dStepOrders * dMulpiply5Digits  <= -dblOpenPriceBUY + dAsk ) return(1);
if ( lWorkingSELL && -dBid + dblOpenPriceSELL >= dMulpiply5Digits * dStepOrders * dPoint ) return(1);

return(0);
}
21:34 4. Добавил параметр (чтобы отличался от % просадки для срабатывания локов)
extern double  SafeEquityRiskSO  = 15;            // Максимальный дродаун Эквити в % от Баланса, после которого все убыточные закрываются
и исправил вызов в функции  CloseOpenOrdersByMaxDrawDown()
if ( AccountProfit() < 0 && dRelativeDrawDown > SafeEquityRiskSO )
22:03 5. Добавил проверку на минимальный лот
if (dblNextLot < dblMinLot) dblNextLot = dblMinLot; // 2014 01 24
6. Исправил ошибку трала
//>> 2015 01 25 ЗДЕСЬ НЕ БЫЛО ОШИБКИ было так:
//else  iAverageOpenPrice = NormalizeDouble((Bid — dblAverageOpenPrice) / Point / iMulpiply5Digits, 0); // 2015 01 23
// исправил так:
else  iAverageOpenPrice = NormalizeDouble((dblAverageOpenPrice — Ask) / Point / iMulpiply5Digits, 0);
//<< 2015 01 25 ЗДЕСЬ БЫЛА ОШИБКА было так:

//>> 2015 01 25 ЗДЕСЬ БЫЛА ОШИБКА было так:
else  iAverageOpenPrice = NormalizeDouble((Bid — dblAverageOpenPrice) / Point / iMulpiply5Digits, 0); //                   // исправил так:
//else  iAverageOpenPrice = NormalizeDouble((dblAverageOpenPrice — Ask) / Point / iMulpiply5Digits, 0);
//<< 2015 01 25 ЗДЕСЬ БЫЛА ОШИБКА было так:

23:31 7. Добавил функцию поиcка ордеров на одном уровне
int SeekOrderByOpenPriceInTrades(int iTypeSeek, int iCmd, double dPriceOPEN ) // номер тикета — орден найден, 0- не найден в открытых позициях
{
int i=0;
int iTicket=0;
int iTypeOrder = 0;
if ( iCmd == OP_BUY  || iCmd == OP_BUYLIMIT  || iCmd == OP_BUYSTOP )  {iTypeOrder = 0;}  // 0 2 4
if ( iCmd == OP_SELL || iCmd == OP_SELLLIMIT || iCmd == OP_SELLSTOP ) {iTypeOrder = 1;}  // 1 3 5
iTicket=0;
for (i=0; i<OrdersTotal(); i++)// По всем ордерам терминала
{
if(OrderSelect(i, SELECT_BY_POS)==true)
if ( ( OrderSymbol()==Symbol() && UseMAGIC == TRUE && ( OrderMagicNumber()==MagicNumberLong || OrderMagicNumber()==MagicNumberShort ) )
|| ( OrderSymbol()==Symbol() && UseMAGIC == FALSE ) ) //2009 02 16
if ( NormalizeDouble(OrderOpenPrice(),Digits) == NormalizeDouble(dPriceOPEN,Digits)  && OrderType()  == iCmd )
{  iTicket = OrderTicket();  break; }
else
if ( ( iCmd == OP_BUY && OrderType() == OP_BUY ) || ( iCmd == OP_SELL && OrderType() == OP_SELL ) )
{  iTicket = OrderTicket();  break; }
else
{
if ( iTypeOrder == 0 ) //Все BUY ордера
if ( NormalizeDouble(OrderOpenPrice(),Digits) == NormalizeDouble(dPriceOPEN,Digits)
&& ( iCmd == OP_BUY  || iCmd == OP_BUYLIMIT  || iCmd == OP_BUYSTOP ) )
{  iTicket = OrderTicket();  break; }
if ( iTypeOrder == 1 ) //Все SELL ордера
if ( NormalizeDouble(OrderOpenPrice(),Digits) == NormalizeDouble(dPriceOPEN,Digits)
&& ( iCmd == OP_SELL || iCmd == OP_SELLLIMIT || iCmd == OP_SELLSTOP ) )
{  iTicket = OrderTicket();  break; }
}
}
return (iTicket);
}
23:36 8. Добавил в функцию открытия ордеров — но не работает …
if (SeekOrderByOpenPriceInTrades(1, OP_BUY, Ask ) == 0) //2015 01 24 Проверка на наличчие открытой позиции на этом уровне
if (SeekOrderByOpenPriceInTrades(1, OP_SELL, Bid ) == 0) //2015 01 24 Проверка на наличчие открытой позиции на этом уровне

Изменения версии 1.23   2015 01 25 (воскресенье) — РАБОТА ПО ТРЕНДУ и против тренда

Show »

08:40 Попробую исправить код трала (скобки после первого else):
if ( TrailOneTrade == TRUE ) iAverageOpenPrice = NormalizeDouble((Bid — OrderOpenPrice()) / Point / iMulpiply5Digits, 0);
else
{
iAverageOpenPrice = NormalizeDouble((Bid — dblAverageOpenPrice) / Point / iMulpiply5Digits, 0);
//>>2015 01 18
// Тралятся только локирующие позиции
if ( ( TrailOneTrade == FALSE ) && ( TrailOnlyLock == TRUE ) && ( OrderTicket() == iTicketLongLock )) {
iAverageOpenPrice = NormalizeDouble((Bid — OrderOpenPrice()) / Point / iMulpiply5Digits, 0);
Print(«TralLongLock! Order # «,OrderTicket(),» OrderOpenPrice=», OrderOpenPrice(), » iAverageOpenPrice= «, iAverageOpenPrice);
}
//>> 2015 01 25 ЗДЕСЬ НЕ БЫЛО ОШИБКИ было так:
else  iAverageOpenPrice = NormalizeDouble((Bid — dblAverageOpenPrice) / Point / iMulpiply5Digits, 0); // 2015 01 23
}

if ( TrailOneTrade == TRUE )
iAverageOpenPrice = NormalizeDouble((OrderOpenPrice() — Ask) / Point / iMulpiply5Digits, 0);
else
{
iAverageOpenPrice = NormalizeDouble((dblAverageOpenPrice — Ask) / Point / iMulpiply5Digits, 0);
// Тралятся только локирующие позиции если TrailOneTrade == FALSE и TrailOnlyLock == TRUE
if (( TrailOneTrade == FALSE ) && ( TrailOnlyLock == TRUE ) && ( OrderTicket() == iTicketShortLock )) {
iAverageOpenPrice = NormalizeDouble((OrderOpenPrice() — Ask) / Point / iMulpiply5Digits, 0);
Print(«TralShortLock! Order # «,OrderTicket(),» OrderOpenPrice=», OrderOpenPrice(), » iAverageOpenPrice= «, iAverageOpenPrice);
}
//>> 2015 01 25 ЗДЕСЬ БЫЛА ОШИБКА было так:
//else  iAverageOpenPrice = NormalizeDouble((Bid — dblAverageOpenPrice) / Point / iMulpiply5Digits, 0); // 2015 01 23
// исправил так:
else  iAverageOpenPrice = NormalizeDouble((dblAverageOpenPrice — Ask) / Point / iMulpiply5Digits, 0);
//<< 2015 01 25
}
09:24 Новая функция
int fSorcererNew(int lWorkingBUY, int lWorkingSELL, double dBid, double dAsk, double dblOpenPriceBUY, double dblOpenPriceSELL, double dPoint, double dStepOrders, double dMulpiply5Digits )
{
//>> 2015 01 24 Попытка заставить работать сетку в сторону тренда
if ( lWorkingBUY  && dPoint * dStepOrders * dMulpiply5Digits <= -dblOpenPriceBUY + dAsk ) return(1);
if ( lWorkingSELL && -dBid + dblOpenPriceSELL >= dMulpiply5Digits * dStepOrders * dPoint ) return(1);

return(0);
}
09:25 Исправил вызов  — работает:
//if (iSorcererLong == 1) lNeedOpenOrdersLong = TRUE;
iSorcererLongNew = fSorcererNew(lWorkingLong, FALSE, Bid, Ask, dblOpenPriceLong, 0, Point, dStepOrdersLong, iMulpiply5Digits);
if ( (iSorcererLong == 1) || (iSorcererLongNew == 1) ) lNeedOpenOrdersLong = TRUE;
//if (iSorcererShort == 1) lNeedOpenOrdersShort = TRUE;
iSorcererShortNew = fSorcererNew(FALSE, lWorkingShort, Bid, Ask, 0, dblOpenPriceShort, Point, dStepOrdersShort, iMulpiply5Digits);
if ( (iSorcererShort == 1) || (iSorcererShortNew == 1) ) lNeedOpenOrdersShort = TRUE;
10:08 Исправил код:
// 10:08 По тренду наращиваем только если сигнал есть
//if ( (iSorcererLong == 1) || (iSorcererLongNew == 1) ) lNeedOpenOrdersLong = TRUE;
if ( (iSorcererLong == 1) || ( (iSorcererLongNew == 1) && ( iOrderTypeMA  == OP_BUY  ) ) ) lNeedOpenOrdersLong = TRUE;
// 10:08 По тренду наращиваем только если игнал есть
//if ( (iSorcererShort == 1) || (iSorcererShortNew == 1) ) lNeedOpenOrdersShort = TRUE;
if ( (iSorcererShort == 1) || ( (iSorcererShortNew == 1)  && ( iOrderTypeMA  == OP_SELL  ) ) ) lNeedOpenOrdersShort = TRUE;

10:18 Параметр вынес наружу
extern double  MultiLotsFactorExp   = 1.01;       // К-т увеличения лота следующих колен по тренду ипротив тренда
if ( iOrderTypeMA  != OP_BUY  ) MultiLotsFactorExp = 1/MultiLotsFactorExp;
if ( iOrderTypeMA  != OP_SELL  ) MultiLotsFactorExp = 1/MultiLotsFactorExp;
10:31 Добавил комменты
Comment( «n»,»n»,»n», «iOrderTypeMA= «, iOrderTypeMA, » MultiLotsFactorExp= «, MultiLotsFactorExp );
13:47 Добавил вывод в коммент
«; MLF L=»,MultiLotsFactorLong,» S=»,MultiLotsFactorShort, » Exp=»,MultiLotsFactorExp,

Изменения версии 1.24 2015 02 01 (воскресенье)  — Закрытие позиций, когда сигнал по МА изменился

Show »

14:15 1. Добавил индикацию dblDeltaLock2
txtOpenLockPosition = txtOpenLockPosition + » Delta » + DoubleToStr(dblDeltaLock,2) + «/» + DoubleToStr(DeltaLock2,0); // 2015 02 01
14:38 2. Принял dblDeltaLock2 = dblDeltaLock; // 2015 02 01
if ( dblSafeEquityRisk > dblCurrent_drawdown + dblDeltaLock2 )
14:50 3. Вернул параметры
extern bool SafeEquityStopOut = TRUE; // Если 1 — закрываем убыточные позиции, если сумма убытка по всем открытым позициям превышает баланс на dMaxRelativeDrawDown %
extern double SafeEquityRiskSO = 40; // Максимальный дродаун Эквити в % от Баланса, после которого все убыточные закрываются
15:28 4. Убрал параметр //extern double DeltaLock2
15:32 5. Включил IndicationTopRight = TRUE; и убрал отображение суммы депозитов и вывовод средств
//Indication («Deposit» ,1,5,iStr , txtAccountDeposit + » — D «,FontSize,»Tahoma»,ColorText);
//iStr = iStr + iStrStep;
//Indication («Widtrawal» ,1,5,iStr , txtAccountWidtrawal + » — W»,FontSize,»Tahoma»,ColorText);
//iStr = iStr + iStrStep;
15:37 6. Исправил индикацию
if ( SafeEquityStopOut == TRUE ) {
txtSafeEquityRisk = «SafeEquity: » + DoubleToStr(SafeEquityRiskSO, 0) + » % DD»; // 2015 02 01
15:51 7. Добавил индиуаию версии советника
string ts = Version + » «; // 2015 02 01
if (IsDemo()) ts = ts + «DEMO «; else ts = ts + «LIVE «;
16:05 8. Поднял чуть по выше индикацию в ЛН углу iStr = iStr + 42; // 2015 02 01
16:10 9. Добавил параметр
extern bool CloseLossesBySignal_MA = TRUE; // закрывать позиции, когда сигнал по МА изменился
17:26 10. Добавил функцию из скальпера проверки сигнала
//>> 2015 02 01 Из скальпера функция переделанная
bool CheckSignals()
{
bool lCheck = false;
int iLocalOrderTypeMA = -1; // на рабочем таймфрейме
if ( CheckMA() == 10 ) // Открытие Buy
{ iLocalOrderTypeMA = OP_BUY;
}
else
if ( CheckMA() == 20 ) // Открытие Sell
{ iLocalOrderTypeMA = OP_SELL;
}
else
if ( CheckMA() == 11 ) // Закрытие Buy
{ iLocalOrderTypeMA = OP_SELL;
}
//if ( iCloseLossesBySignalsMA == 1 ) { CloseAllOpenOrders(); }
else
if ( CheckMA() == 21 ) // Закрытие Sell
{ iLocalOrderTypeMA = OP_BUY;
}
//if ( iCloseLossesBySignalsMA == 1 ) { CloseAllOpenOrders(); }
else
{ iLocalOrderTypeMA = -1;
}

if ( iOrderTypeMA != iLocalOrderTypeMA ) // сигнал изменился на рабочем таймфрейме
{
if ( ( iOrderTypeMA == OP_BUY || iOrderTypeMA == OP_SELL ) && iLocalOrderTypeMA == -1 ) // изменился сигнал на FLAT — считаем старый сигнал действующим
{

}
else
{
lCheck = TRUE;
iOrderTypeMA = iLocalOrderTypeMA;
if ( CloseLossesBySignal_MA == TRUE ) // закрывать позиции, когда сигнал по МА изменился
{
// Здесь должен быть код закрытия сделок против тренда
}
}
}
return(lCheck);
}

Изменения версии 1.24 2015 02 03 (вторник)

Show »

10:24 1. Добавлен расчет количества открытых позиций по всем парам
int iAllOpenOrders = 0; // 2015 02 03
for (int cnt=0;cnt<OrdersTotal();cnt++)
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{ iAllOpenOrders ++; // 2015 02 03
10:45 2. Добавлен расчет и индикация количества открытых позиций по всем парам и по текущей паре
iStr = iStr + iStrStep*2;
string txtOpenOrders = «Orders » + Symbol() + » » + iOpenOrders;
Indication («OpenOrders»,1,5,iStr , «» +txtOpenOrders,FontSize,»Tahoma»,Lavender);
iStr = iStr + iStrStep+2;
string txtAllOpenOrders = «All Open orders » + iAllOpenOrders;
Indication («AllOpenOrders»,1,5,iStr , «» +txtAllOpenOrders,FontSize,»Tahoma»,Lavender);

Изменения версии 1.24 2015 02 04 (среда)

Show »

12:53 1. Вернул параметр
extern double DeltaLock2 = 7; // % отклонения реальной просадки от расчетной, на который уменьшается dblSafeEquityRisk
12:54 2. Параметры по умолчанию изменил: включил SafeEquityStopOut (по вчерашнему опыту торговли на демке на VPS)
extern bool SafeEquityStopOut = TRUE; // Если 1 — закрываем убыточные позиции, если сумма убытка по всем открытым позициям превышает баланс на dMaxRelativeDrawDown %
extern double SafeEquityRiskSO = 40; // Максимальный дродаун Эквити в % от Баланса, после которого все убыточные закрываются
extern int TimeFrame_MA = 60; // Рабочий таймфрейм для определения направления по MA
14:30 3. Вернул индикацию
string txtRisk = «»;
txtRisk = txtRisk + «Risk » + DoubleToStr(MinRisk, 0) +»%»;
txtRisk = txtRisk + » ( » + DoubleToStr(dblMinLot, 2) + » )»; //2015 02 04 вернул
txtRisk = txtRisk + » / » + DoubleToStr(MaxRisk, 0) +»%»;
txtRisk = txtRisk + » ( » + DoubleToStr(dblMaxLot, 2) + » )»; //2015 02 04 вернул

Изменения версии 1.24   2015 02 06 (пятница)

Show »

14:01 1. Исправил комменты к локам
TradeComment  = Version + » » + Symbol() + » Short LOCK » + MagicNumberShort; // 2015 02 06
TradeComment  = Version + » » + Symbol() + » Long LOCK » + MagicNumberLong; // 2015 02 06
15:20 2. Перенес открытие локов в начало функции старт
16:02 3. Поставил трал в конец   — OnlyLock заработал!!!
if (iCountWorkingOrdersLong > 0)
{ if ( UseTrailing == TRUE )  fModifyOrder(OP_BUY, MagicNumberLong, TrailStart, TrailStop, dblAverageOpenPriceLong); }
if (iCountWorkingOrdersShort > 0)
{ if ( UseTrailing == TRUE )  fModifyOrder(OP_SELL, MagicNumberShort, TrailStart, TrailStop, dblAverageOpenPriceShort); }