Скачать MetaTrader 5

Советники: BILL_VILJAMS_BC.mq4 - Чудо-советник по Биллу Вильямсу

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликовал программу в Маркете? Опубликуй ее и в блоге - виджет поможет!
MetaQuotes Software Corp.
Модератор
181337
MetaQuotes Software Corp. 2011.02.14 08:28 

BILL_VILJAMS_BC.mq4 - Чудо-советник по Биллу Вильямсу:

Используются только Фракталы и Аллигатор

Author: Sergey Sartakov

MQL4 Comments
16319
MQL4 Comments 2011.02.14 18:40  

Уважаемый more.

Ваш советник при компиляции выдаёт:

Function "sign" is not referenced and will be removed from exp-file
Function "iifStr" is not referenced and will be removed from exp-file
Function "orderDirection" is not referenced and will be removed from exp-file

Не оптимизируеися. Не торгует (в тестере).

Подскажите, что исправить. Хочется ваше чудо в деле посмотреть.

Sergey Sartakov
1287
Sergey Sartakov 2011.02.14 19:40  
Lest:

Уважаемый more.

Ваш советник при компиляции выдаёт:

Function "sign" is not referenced and will be removed from exp-file
Function "iifStr" is not referenced and will be removed from exp-file
Function "orderDirection" is not referenced and will be removed from exp-file

Не оптимизируеися. Не торгует (в тестере).

Подскажите, что исправить. Хочется ваше чудо в деле посмотреть.

Оптимизировать там нечего, а торговать должен, если параметр Trade_Allowed = true.

Послал вам в "сообщения" полную сборку этого советника, немного поправил по сравнению с тем, что выложен здесь...

Andrey Egorov
3819
Andrey Egorov 2011.02.15 04:35  

Здравствуйте more,

скажите, трал вы не используйте ?

ZZZEROXXX
768
ZZZEROXXX 2011.02.15 11:27  
а почему сдесь исправленную не выложить. кто тестил выкладывайте картинку
Sergey Sartakov
1287
Sergey Sartakov 2011.02.15 11:45  
ZZZEROXXX:
а почему сдесь исправленную не выложить. кто тестил выкладывайте картинку

Выкладываю.

//+------------------------------------------------------------------+
//| BILL_VILJAMS.mq4 |
//| Copyright © 2010, "more" |
//| "mailto:tradertobe@gmail.com |
//+------------------------------------------------------------------+
//ВСЕ ОЧЕНЬ ПРОСТО: ОТКРЫТИЕ ПЕРВОЙ ПОЗИЦИИ ПРОИЗВОДИТСЯ НА НУЛЕВОМ БАРЕ ПРИ ПРОБОЕ ТЕКУЩЕГО ФРАКТАЛА ВЫШЕ ЗУБОВ АЛЛИГАТОРА.
// ДОПОЛНИТЕЛЬНЫЕ ПОЗИЦИИ В НАПРАВЛЕНИЕ ПЕРВОЙ ПОЗИЦИИ ОТКРЫВАЮТСЯ НА НУЛЕВОМ БАРЕ ПРИ ПРОБОЕ ТЕКУЩЕГО ФРАКТАЛА
// ВЫШЕ ЗУБОВ АЛЛИГАТОРА, НО ЛИШЬ ПРИ УСЛОВИИ, ЕСЛИ ВСЕ ТРИ ЛИНИИ АЛЛИГАТОРА ВЫСТРОИЛИСЬ В ТРЕНД НА НУЛЕВОМ БАРЕ.
// ЗАКРЫТИЕ ВСЕХ ПОЗИЦИЙ ПРИОИЗВОДИТСЯ ПРИ ВОЗНИКНОВЕНИЕ НУЛЕВОГО БАРА ПРИ УСЛОВИЕ, КОГДА ЗАКРЫТИЕ ПЕРВОГО БАРА
// ПРОИЗОШЛО ЗА ПРЕДЕЛАМИ ГУБ/ЗУБОВ/ЧЕЛЮСТИ (ЗАДАЕТСЯ ВНЕШНИМ ПАРАМЕТРОМ) АЛЛИГАТОРА.
// Delta, TakeProfit, StopLoss и Stop_0 заданы для 4-х разрядных котировок, если котировки 5-ти разрядные, то программа сама это обнаруживает
// и умножает заданные величины на 10.

#property copyright "more"
#property link "mailto:tradertobe@gmail.com"
#include <stderror.mqh>
#include <stdlib.mqh>
#include <WinUser32.mqh>
//--
/*
#include <GlobalVariables.mqh>
#include <SetSignales.mqh>
#include <OrdersOpen.mqh>
#include <OrdersClose.mqh> -
#include <OrdersModify.mqh> -
#include <OrdersDelete.mqh> -
#include <AllOrdersInit.mqh> -
#include <SetFractalsValue.mqh> -
#include <GetJTLCloseLevelTrend.mqh> -
#include <GetZeroTargetLines.mqh> -
#include <ServiceFunctions.mqh> -
*/
//+------------------------------------------------------------------+
//| GlobalVariables.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
extern bool TradeAllowed = true; // разрешение на торговлю, если TradeAllowed = false, но есть открытые позиции,
// то они будут закрыта обычным манером - при возникновения сигнала на закрытие,
// однако, новые позиции открываться не будет.
// Поэтому задав TradeAllowed = false, можно идти отдыхать, надеясь что все будет хорошо.
extern double ProfitTarget = 1000.0; // целевая прибыль в валюте депозита, при достижение общей прибылью ProfitTotal этого значения все позиции закрываются
extern int MagicNumber = 5; // при нудевом значение советник принимает за свои все ордера открытые на инструменте, на котором он запущен
extern double Lot = 1; // эти лотом мы будем торговать
// TakeProfit,StopLoss, Stop_0 и Delta заданы для 4-х разрядных котировок, если котировки 5-ти разрядные, то программа сама это обнаруживает
// и умножает заданные величины на 10.
extern int TakeProfit = 0; // 4-х разрядная котировка
extern int StopLoss = 0; // 4-х разрядная котировка
extern int Stop_0 = 0; // 4-х разрядная котировка, при достижение любым из ордеров такого профита в пунктах его стоп-лосс переносится в безубыток.
// Если Stoplevel не позволяет этого сделать, выдается сообщение и звуковой сигнал тревоги.
// Если Stop_0 = 0, то никаких действий по переносу StopLoss-уровня в безубыток не производим.
extern double Stop_0_Zero = 300.0; // когда общая прибыль превысит это значение, стоп-лосы всех ордеров переносятся на линию безубытка ZeroTargetPrice
// Если Stop_0_Zero = 0, никаких действий не производим
extern double ZeroTarget = 100.0; // значение общей прибыли на уровне безубытка ZeroTargetPrice
extern int Delta = 1; // 4-х разрядная котировка, когда цена Bid превысила/опустилась ниже значения верхнего/нижнего фрактала
// на это значение в пунктах, фрактал считается пробитым
// Критерий закрытия всех позиций - выбираться должен только один из этих критериев, в противном случае советник откажется работать
extern bool CloseAllonLIPS = false;
extern bool CloseAllonTEETH = true;
extern bool CloseAllonJAW = false;
// Еще один критерий закрытия всех позиций. Этот критерий имеет приоритет над критериями, указанными выше.
extern double CloseAllonProfitValue = 1000000.0; // при превышение профитом указанной величины в валюте депозита, все позиции закрываются
// Возможно вам захочется принудительно закрыть все позиции независимо от достижения других критериев
extern bool CloseForced = false; // принудительное закрытие всех позиций
extern bool OpenBuyOnly = false; // будут открываться только позиции вверх
extern bool OpenSellOnly = false; // будут открываться только позиции вниз

int Stoplevel; // здесь будет храниться текущий Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVE)

double ProfitTotal;
double ZeroTargetPrice;
double ProfitTargetPrice;
double TicValue;

static bool BUY_Sign = false;
static bool BUY_Stop = false;
static bool SELL_Sign = false;
static bool SELL_Stop = false;

static datetime LastBar = 0;
int bar2, bar1, bar0;
//---
double FractalUpperValue = 0;
datetime FractalUpperTime = 0;
bool FractalUpperHit = false;
double FractalLowerValue = 0;
datetime FractalLowerTime = 0;
bool FractalLowerHit = false;

//---
int jaw_period = 13; //Период усреднения синей линии (челюсти аллигатора).
int jaw_shift = 8; //Смещение синей линии относительно графика цены.
int teeth_period = 8; //Период усреднения красной линии (зубов аллигатора).
int teeth_shift = 5; //Смещение красной линии относительно графика цены.
int lips_period = 5; //Период усреднения зеленой линии (губ аллигатора).
int lips_shift = 3; //Смещение зеленой линии относительно графика цены.
int ma_method = MODE_SMMA; //Метод усреднения. Может быть любым из значений методов скользящего среднего (Moving Average).
int applied_price = PRICE_MEDIAN; //Используемая цена. Может быть любой из ценовых констант.
//mode - Источник данных, идентификатор одной из линий индикатора. Mожет быть любой из следующих величин:
//MODE_GATORJAW - синяя линия (линия челюсти аллигатора),
//MODE_GATORTEETH - красная линия (линия зубов аллигатора),
//MODE_GATORLIPS - зеленая линия (линия губ аллигатора).
double Jaw_0;
double Jaw_1;
double Jaw_2;

double Teeth_0;
double Teeth_1;
double Teeth_2;

double Lips_0;
double Lips_1;
double Lips_2;

bool TrendUp0; // TrendUp0 = true if (Lips_0 > Teeth_0 && Teeth_0 > Jaw_0)
bool TrendDown0; // TrendDown0 = true if (Lips_0 < Teeth_0 && Teeth_0 < Jaw_0)

bool TrendUp1; // TrendUp1 = true if (Lips_1 > Teeth_1 && Teeth_1 > Jaw_1)
bool TrendDown1; // TrendDown1 = true if (Lips_1 < Teeth_1 && Teeth_1 < Jaw_1)

bool TrendUp2; // TrendUp2 = true if (Lips_2 > Teeth_2 && Teeth_2 > Jaw_2)
bool TrendDown2; // TrendDown2 = true if (Lips_2 < Teeth_2 && Teeth_2 < Jaw_2)

double CloseLevel; // зависит от внешних параметров CloseAllonLIPS, CloseAllonTEETH, CloseAllonJAW

int _ExpertOrdersTotal; //общее количество ордеров, принадлежащих эксперту
int _ExpertOrdersBuy;
int _ExpertOrdersSell;
int _ExpertOrdersBuyStop;
int _ExpertOrdersSellStop;
int _ExpertOrdersBuyLimit;
int _ExpertOrdersSellLimit;

// массивы, в которых будут хранитсья характеристики ордеров при входе по текущему тику:
int _OrderTicket[], _OrderType[];
double _OrderLots[], _OrderOpenPrice[], _OrderStopLoss[], _OrderTakeProfit[];
double _OrderProfit[], _OrderSwap[], _OrderCommission[];
datetime _OrderOpenTime[], _OrderExpiration[];
string _OrderComment[];
int _OrderMagicNumber[];

color Order_Clr;
#define ORDER_BUY_CLR Blue
#define ORDER_SELL_CLR Red

string OrderOpenSetOkMes = " - Открыт/установлен успешно";
string OrderOpenSetErrorMes = " - Ошибка открытия/установки";
string OrderOpenStoplevel_ErrorMes = " - Ошибка открытия: StopLoss/TakeProfit меньше текущего Stoplevel=";

string OrderModifyOkMes = " - Модифицирован успешно";
string OrderModifyErrorMes = " - Ошибка при модификации";
string OrderModifyStop_0_ErrorMes = " - Ошибка при модификации: Stop_0 меньше текущего Stoplevel=";
string OrderModifyZeroPrice_ErrorMes = " - Ошибка при модификации: разница между текущей ценой и ZeroPrice меньше текущего Stoplevel=";

string OrderDeleteOkMes = " - Удален успешно";
string OrderDeleteErrorMes = " - Ошибка при удалении";

string OrderCloseOkMes = " - Закрыт успешно";
string OrderCloseErrorMes = " - Ошибка при закрытии";

string CloseParmErrorMes="Неверно заданы параметры закрытия позиций CloseAllonLIPS,CloseAllonTEETH,CloseAllonJAW,должен бать задан только один критерий";
string CloseForcedParmErrorMes="Неверно задан параметр принудительного закрытия всех позиций CloseForced, на старте этот параметр д.б. равен false";
string OnlyTradeParmErrorMes="Неверно заданы параметры односторонней торговли OpenBuyOnly, OpenSellOnly, только один из них д.б. true";
string Stop_0Stop_0_ZeroParmErrorMes="Неверно заданы параметры Stop_0, Stop_0_Zero, только один из может быть отличным от нуля";
string ParmsErrorsMes="Ошибки в задание значений внешних параметров, советник не работает !";
string ParmsOKReadyMes="Внешние параметры заданы верно,Советник работает и готов открывать позиции - TradeAllowed = true";
string ParmsOKNotReadyMes="Внешние параметры заданы верно,Советник работает, но торговля запрещена - TradeAllowed = false";

int TradeDirection;
int LastError;
int i;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
AllOrdersInit(MagicNumber);
SetSignales(BUY_Sign, BUY_Stop, SELL_Sign, SELL_Stop, LastBar, bar2, bar1, bar0 );
if (OrdersOpen(BUY_Sign, SELL_Sign)) return(0);

AllOrdersInit(MagicNumber);
if (OrdersClose(BUY_Stop, SELL_Stop ) ) return(0);

AllOrdersInit(MagicNumber);
GetZeroTargetLines();
if (OrdersModify()) return(0);
//----
return(0); // возвращаем управление терминалу
}
// end of int start()
//**************************************************************************************************************************
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if (Digits == 5 ||Digits == 3 )
{
Delta *=10;
TakeProfit *=10;
StopLoss *=10;
Stop_0 *=10;
}
LastBar = 0;
TicValue = MarketInfo(Symbol(),MODE_TICKVALUE);
// Проверим правильность заданий внешних параметров работы советника
bool parmserrors = false;
i = 0;
if (CloseAllonLIPS) i++;
if (CloseAllonTEETH) i++;
if (CloseAllonJAW) i++;
if (i != 1) {Print(CloseParmErrorMes); parmserrors = true;}
//
// Проверим правильность задания параметра принудительного закрытия всех позиций
// if (CloseForced) {Print(CloseForcedParmErrorMes); parmserrors = true;}
//----
// Проверим правильность задания параметров торговли в одну сторону - OpenBuyOnly OpenSellOnly
if (OpenBuyOnly && OpenSellOnly) {Print(OnlyTradeParmErrorMes); parmserrors = true;}
//--- // Если Stop_0 = 0, то никаких действий по переносу StopLoss-уровня в безубыток не производим.
// Проверим правильность задания параметров Stop_0 и Stop_0_Zero - только один из этих параметров может быть отличным от нуля
if (Stop_0 != 0 && Stop_0_Zero != 0) {Print(Stop_0Stop_0_ZeroParmErrorMes); parmserrors = true;}
//---
if (parmserrors) {TradeAllowed = false; PlaySound("alert.wav"); Print(ParmsErrorsMes);}
else
if (TradeAllowed) {PlaySound("ok.wav"); Print(ParmsOKReadyMes);}
else {PlaySound("ok.wav"); Print(ParmsOKNotReadyMes);}
//---
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
ObjectDelete("FractalUpper");
ObjectDelete("FractalLower");
ObjectDelete("ZeroPrice");
ObjectDelete("ProfitTargetPrice");
//----
return(0);
}
//+------------------------------------------------------------------+
//| SetSignales.mq4 |
//| Copyright © 2010, "more" |
//| "mailto:tradertobe@gmail.co |
//+------------------------------------------------------------------+
//************************************************************
void SetSignales(bool& BUY_Sign, bool& BUY_Stop, bool& SELL_Sign, bool& SELL_Stop, int& LastBar, int& bar2, int& bar1,int& bar0 )
{
datetime IBARS = iTime(NULL,0,0);
//---
if (LastBar != IBARS) // проверка на начало нового бара
{
LastBar = IBARS; // новый бар
SetFractalsValue();
GetJTLCloseLevelTrend();
//---
if (Close[1] < CloseLevel) BUY_Stop = true;

if (Close[1] > CloseLevel) SELL_Stop = true;
} // if (LastBar != IBARS)
else
{ // просто тик на нулевом баре
//---
GetJTLCloseLevelTrend();
//---
double BuyLevel = FractalUpperValue + Delta*Point;
double SellLevel = FractalLowerValue - Delta*Point;
if (!FractalUpperHit)
{
// Сигнал на открытие первой позиции в торговом цикле вверх
if (_ExpertOrdersTotal ==0 && (Bid > BuyLevel) && (BuyLevel > Teeth_0))
{
BUY_Sign = true;
FractalUpperHit = true; ObjectSet("FractalUpper",OBJPROP_COLOR,White);
return;
}
// Сигнал на открытие доливочных поозиций в торговом цикле вверх
if (_ExpertOrdersTotal >= 1 && (Bid > BuyLevel) && (BuyLevel > Teeth_0) && TrendUp0)
{
BUY_Sign = true;
FractalUpperHit = true; ObjectSet("FractalUpper",OBJPROP_COLOR,White);
return;
}
} // if (!FractalUpperHit)
//---
if (!FractalLowerHit)
{
// Сигнал на открытие первой позиции в торговом цикле вниз
if (_ExpertOrdersTotal ==0 && (Bid < SellLevel) && (SellLevel < Teeth_0))
{
SELL_Sign = true;
FractalLowerHit = true; ObjectSet("FractalLower",OBJPROP_COLOR,White);
return;
}
// Сигнал на открытие доливочных позиций в торговом цикле вниз
if (_ExpertOrdersTotal >= 1 && (Bid < SellLevel) && (SellLevel < Teeth_0) && TrendDown0)
{
SELL_Sign = true;
FractalLowerHit = true; ObjectSet("FractalLower",OBJPROP_COLOR,White);
return;
}
} // if (!FractalLowerHit)
// Может так случиться, что общая прибыль превысит значение, заданное во внешней переменной -
// extern double ProfitTarget = 3000.0 - целевая прибыль в валюте депозита, когда общая прибылью ProfitTotal превысит этог значения все позиции закрываются
// если ProfitTarget = 0, этот механизь закрытия торгового цикла не используется
ProfitTotal = 0;
for (i = 0; i < _ExpertOrdersTotal; i++)
{
ProfitTotal += _OrderProfit[i];
}
Comment("Прибыль в валюте депозита = ",NormalizeDouble(ProfitTotal,0));
if (ProfitTarget != 0 && ProfitTotal > ProfitTarget)
{
if (_OrderType[0] == OP_BUY) BUY_Stop = true;
if (_OrderType[0] == OP_SELL) SELL_Stop = true;
}
//---
// Если задано значение параметра советника extern bool CloseForced = true(принудительное закрытие всех позиций),
// то все позиции будут закрыты одна за другой. После закрытия всех позиций советник возобновляет работу в обычном режиме,
// однако, чтобы избежать случайностей инициируйте советник значением CloseForced = false
if (CloseForced && _ExpertOrdersTotal !=0)
{
if (_OrderType[0] == OP_BUY) BUY_Stop = true;
if (_OrderType[0] == OP_SELL) SELL_Stop = true;
CloseForced = false;
Comment("Принудительное закрытие всех позиций согласно значения CloseForced=true"+"\n"+
"После закрытия всех позиций обязательно инициируйте советник со зачением CloseForced=false");
}
//---
} // else
return;
} // end of void SetSignales ()
//************************************************************

// Может так случиться, что сигнал на закрытие торговго цикла еще не появился, но уже открылась первая
// позиция торгового цикла в противоположном направление.
// Как только мы обнаружим такую ситуацию, немедленно формируем сигнал на закрытие всех позиций предыдущего торгового цикла
/*
if (_ExpertOrdersBuy >= 1 && _ExpertOrdersSell >= 1)
{
if (_OrderType[_ExpertOrdersTotal-1] == OP_BUY) SELL_Stop = true;
if (_OrderType[_ExpertOrdersTotal-1] == OP_SELL) BUY_Stop = true;
}
*/
//---
//+------------------------------------------------------------------+
//| OrdersOpen.mq4 |
//| Copyright © 2010, "more" |
//| "mailto:tradertobe@gmail.com |
//+------------------------------------------------------------------+
//+---------------------------------------------------------------------------------------------------------------+
//| функция открывает ордера |
//+---------------------------------------------------------------------------------------------------------------+
bool OrdersOpen(bool& BUY_Sign, bool& SELL_Sign) // return(true) -функция выполнила все что могла и управление следует передать терминалу
{ // return(false)-в вызове функции не было необходимости, управление следует передать далее по телу функции start()
if (!BUY_Sign && !SELL_Sign) return(false);
//----
if (TradeAllowed)
{
Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if ((StopLoss != 0 && StopLoss < Stoplevel) || (TakeProfit != 0 && TakeProfit < Stoplevel))
{
PlaySound("alert.wav");
Print(OrderOpenStoplevel_ErrorMes+Stoplevel);
return(false);
} // if ((StopLoss != 0 && StopLoss < Stoplevel) || (TakeProfit != 0 && TakeProfit < Stoplevel))
i = 0; // ради удобства
TradeDirection = iif(BUY_Sign,+1,-1);
_OrderType [i] = iif(TradeDirection < 0,OP_SELL,OP_BUY);
_OrderLots [i] = Lot;
_OrderOpenPrice [i] = iif(_OrderType[i]==OP_BUY,Ask,Bid);

_OrderStopLoss [i] = iif(_OrderType[i]==OP_BUY,_OrderOpenPrice[i] - StopLoss * Point,_OrderOpenPrice[i] + StopLoss * Point);
_OrderStopLoss [i] = iif( _OrderStopLoss[i]==_OrderOpenPrice[i],0,_OrderStopLoss[i]);

_OrderTakeProfit[i] = iif(_OrderType[i]==OP_BUY,_OrderOpenPrice[i] + TakeProfit*Point,_OrderOpenPrice[i] - TakeProfit*Point);
_OrderTakeProfit[i] = iif(_OrderTakeProfit[i] == _OrderOpenPrice[i],0,_OrderTakeProfit[i]);

_OrderMagicNumber[i] = MagicNumber;
_OrderComment [i] = " ";
Order_Clr = iif(TradeDirection > 0,ORDER_BUY_CLR,ORDER_SELL_CLR);
bool temp = false;
if (_OrderSend())
{
BUY_Sign = iif(TradeDirection == +1,false,BUY_Sign );
SELL_Sign = iif(TradeDirection == -1,false,SELL_Sign);
temp = true;
}
return(temp);
} // if (TradeAllowed)
//----
return(false); // вызов функции не был необходим, управление следует передать далее по телу функции start()
} // bool OrdersOpen(bool& BUY_Sign, bool& SELL_Sign)
//+---------------------------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| функция посылает на ТОРГОВЫЙ СЕРВЕР команды на немедленное |
//| открытие ордера или на установку лимитного ордера |
//+------------------------------------------------------------------+
bool _OrderSend()
{
if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // торговый поток занят, подождем следующего тика
_OrderTicket[i]=
OrderSend(Symbol(),_OrderType [i]
,_OrderLots [i]
,_OrderOpenPrice [i],3
,_OrderStopLoss [i]
,_OrderTakeProfit [i]
,_OrderComment [i]
,_OrderMagicNumber[i],0,Order_Clr);
if (_OrderTicket[i] < 0)
{
LastError = GetLastError();
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+OrderOpenSetErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
PlaySound("alert.wav");
return(false);
}
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderOpenSetOkMes);
PlaySound("ok.wav");
return(true);
} // end of bool _OrderSend()
//+---------------------------------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| OrdersClose.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------------------------------------------------+
//| функция производит закрытие всех открытых ордеров BUY или | всех открытых ордеров SELL
//+----------------------------------------------------------------------------------------------------------------------+
bool OrdersClose(bool& BUY_Stop, bool& SELL_Stop ) // return(true) -функция выполнила все что могла и управление следует передать терминалу
{ // return(false)-в вызове функции не было необходимости, управление следует передать далее по телу функции start()
if (!BUY_Stop && !SELL_Stop) return(false);
if (BUY_Stop && _ExpertOrdersBuy == 0) {BUY_Stop = false; return(false);}
if (SELL_Stop && _ExpertOrdersSell == 0) {SELL_Stop = false; return(false);}

i = 0;
TradeDirection = iif(BUY_Stop,+1,-1);
_OrderOpenPrice [i] = iif(TradeDirection == +1,Bid,Ask);
Order_Clr = iif(TradeDirection > 0,ORDER_BUY_CLR,ORDER_SELL_CLR);
if (_OrderClose()) return(true);
return(false);
} // end of if ( (BUY_Stop && _ExpertOrdersBuy != 0) || (SELL_Stop && _ExpertOrdersSell != 0))
//+--------------------------------------------------------------------+
//| функция посылает на ТОРГОВЫЙ СЕРВЕР команду на немедленное |
//| закрытие открытогоо ордера |
//+--------------------------------------------------------------------+
bool _OrderClose()
{
if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // торговый поток занят, подождем следующего тика
if (OrderClose(_OrderTicket [i]
,_OrderLots [i]
,_OrderOpenPrice[i],3
,Order_Clr))
{
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderCloseOkMes);
PlaySound("ok.wav");
return(true);
}
LastError = GetLastError();
Print("("+_OrderMagicNumber[i]+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderCloseErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
PlaySound("alert.wav");
return(false);
} // end of bool _OrderClose()
//************************************************************************************************************************************
//+------------------------------------------------------------------+
//| OrdersModify.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
//+---------------------------------------------------------------------------------------+
//| функция производит модификацию ордеров исходя из результатов анализа текущей ситуации |
//+---------------------------------------------------------------------------------------+
bool OrdersModify() // return(true) -функция выполнила все что могла и управление следует передать терминалу
{ // return(false)-в вызове функции не было необходимости, управление следует передать далее по телу функции start()
if (_ExpertOrdersTotal == 0) return(false);
//--
ProfitTotal = 0;
for (i = 0; i < _ExpertOrdersTotal; i++)
{
ProfitTotal += _OrderProfit[i];
}
Comment("Прибыль в валюте депозита = ",NormalizeDouble(ProfitTotal,0));
//--
// Если Stop_0 != 0, установим стоп-лосы всех открытых позиций в безубыток
if (Stop_0 != 0)
{
for (i = 0; i < _ExpertOrdersTotal; i++)
{
TradeDirection = iif(_OrderType[i] == OP_BUY,+1,-1);
double CurrentPrice = iif(TradeDirection == +1,Bid,Ask);
int ProfitPips = iif(TradeDirection == +1,(CurrentPrice - _OrderOpenPrice[i])/Point,(_OrderOpenPrice[i] - CurrentPrice)/Point);
if (ProfitPips < Stop_0) continue;
Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (Stop_0 <= Stoplevel)
{
PlaySound("alert.wav");
Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyStop_0_ErrorMes+Stoplevel);
continue;
}
if (_OrderStopLoss [i] == _OrderOpenPrice [i]) continue;
_OrderStopLoss [i] = _OrderOpenPrice [i];
bool temp = _OrderModify();
break;
} // for (i = 0; i < _ExpertOrdersTotal; i++)
return(temp);
} // if (Stop_0 != 0)
// Когда общая прибыль ProfitTotal превысмт значение extern double Stop_0_Zero, стоп-лосы всех ордеров переносятся на линию безубытка ZeroTargetPrice
if (ProfitTotal > Stop_0_Zero && Stop_0_Zero != 0)
{
for (i = 0; i < _ExpertOrdersTotal; i++)
{
TradeDirection = iif(_OrderType[i] == OP_BUY,+1,-1);
CurrentPrice = iif(TradeDirection == +1,Bid,Ask);
int ZeroPips = iif(TradeDirection == +1,(CurrentPrice - ZeroTargetPrice)/Point,(ZeroTargetPrice - CurrentPrice)/Point);
Stoplevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
if (ZeroPips <= Stoplevel)
{
PlaySound("alert.wav");
Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyZeroPrice_ErrorMes+Stoplevel);
continue;
}
if (_OrderStopLoss [i] == ZeroTargetPrice) continue;
_OrderStopLoss [i] = ZeroTargetPrice;
temp = _OrderModify();
break;
} // for (i = 0; i < _ExpertOrdersTotal; i++)
return(temp);
} // if (ProfitTotal > Stop_0_Zero)
} // end of bool OrdersModify()
//+--------------------------------------------------------------------+
//| функция посылает на ТОРГОВЫЙ СЕРВЕР команду на немедленную |
//| модификацию открытого или лимитного ордера |
//+--------------------------------------------------------------------+
bool _OrderModify()
{
if (IsTradeContextBusy()) { PlaySound("alert.wav"); return(false);} // торговый поток занят, подождем следующего тика
if (OrderModify(_OrderTicket [i]
,_OrderOpenPrice [i]
,_OrderStopLoss [i]
,_OrderTakeProfit[i]
,0
,CLR_NONE))
{
Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyOkMes);
PlaySound("ok.wav");
return(true);
}
LastError = GetLastError(); if (LastError == ERR_NO_RESULT) return(true);
Print("("+MagicNumber+")"+_OrderComment[i]+"("+_OrderTicket[i]+")"+OrderModifyErrorMes+" : "+ LastError+" - "+ErrorDescription(LastError));
PlaySound("alert.wav");
return(false);
} // end of bool _OrderModify()
//+---------------------------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| AllOrdersInit.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
//| функция производит формирование массивов, каждый из которых представляет одно |
//| поле ордера, принадлежащего эксперту. таким образом, множество элементов массивов с |
//| одним значение индекса представляет ордер. массивы отсортированы в порядке возрастания тикета |
//| размерность массивов = _ExpertOrdersTotal + 1 |
//| последние элементы массивов будут использоваться нами для формирования данных при открытии/установки|
//| нового ордера |
//+----------------------------------------------------------------------------------------------------+
//"mailto:komposterius@mail.ru" - Андрей Хатимлянский - автор этой функции
//http://www.mql4.com/ru/users/komposter Андрей Хатимлянский
void AllOrdersInit( int magic )
{
int _GetLastError = 0, _OrdersTotal = OrdersTotal();
_ExpertOrdersTotal = 0; //общее количество ордеров, принадлежащих эксперту
_ExpertOrdersBuy = 0; //
_ExpertOrdersSell = 0; //
_ExpertOrdersBuyStop = 0; //
_ExpertOrdersSellStop = 0; //
_ExpertOrdersBuyLimit = 0; //
_ExpertOrdersSellLimit = 0; //
// изменяем размеры массивов под текущее кол-во позиций
// (если _OrdersTotal = 0, меняем размер массивов на 1)
int temp_value = MathMax( _OrdersTotal+1, 1 );
ArrayResize( _OrderTicket, temp_value );
ArrayResize( _OrderType, temp_value );
ArrayResize( _OrderLots, temp_value );
ArrayResize( _OrderOpenPrice, temp_value );
ArrayResize( _OrderStopLoss, temp_value );
ArrayResize( _OrderTakeProfit, temp_value );
ArrayResize( _OrderOpenTime, temp_value );
ArrayResize( _OrderProfit, temp_value );
ArrayResize( _OrderSwap, temp_value );
ArrayResize( _OrderCommission, temp_value );
ArrayResize( _OrderComment, temp_value );
ArrayResize( _OrderExpiration, temp_value );
ArrayResize( _OrderMagicNumber, temp_value );


// обнуляем массивы
ArrayInitialize( _OrderTicket, 0 );
ArrayInitialize( _OrderType, 0 );
ArrayInitialize( _OrderLots, 0 );
ArrayInitialize( _OrderOpenPrice, 0 );
ArrayInitialize( _OrderStopLoss, 0 );
ArrayInitialize( _OrderTakeProfit, 0 );
ArrayInitialize( _OrderOpenTime, 0 );
ArrayInitialize( _OrderProfit, 0 );
ArrayInitialize( _OrderSwap, 0 );
ArrayInitialize( _OrderCommission, 0 );
ArrayInitialize( _OrderExpiration, 0 );
ArrayInitialize( _OrderMagicNumber, 0 );

for ( int z = 0; z < _OrdersTotal; z ++ )
{
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print("OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
continue;
}
if (magic == 0)
{
if (OrderSymbol() == Symbol() )
{
// заполняем массив тикетов ордеров, принадлежащих експерту
_OrderTicket [_ExpertOrdersTotal] = OrderTicket();
_ExpertOrdersTotal ++;
switch(OrderType())
{
case OP_BUY : _ExpertOrdersBuy++ ; break;
case OP_SELL : _ExpertOrdersSell++ ; break;
case OP_BUYSTOP : _ExpertOrdersBuyStop++ ; break;
case OP_SELLSTOP : _ExpertOrdersSellStop++ ; break;
case OP_BUYLIMIT : _ExpertOrdersBuyLimit++ ; break;
case OP_SELLLIMIT : _ExpertOrdersSellLimit++ ; break;
}
} // if (OrderSymbol() == Symbol() )
} // if (magic == 0)
else
if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() )
{
{
// заполняем массив тикетов ордеров, принадлежащих експерту
_OrderTicket [_ExpertOrdersTotal] = OrderTicket();
_ExpertOrdersTotal ++;
switch(OrderType())
{
case OP_BUY : _ExpertOrdersBuy++ ; break;
case OP_SELL : _ExpertOrdersSell++ ; break;
case OP_BUYSTOP : _ExpertOrdersBuyStop++ ; break;
case OP_SELLSTOP : _ExpertOrdersSellStop++ ; break;
case OP_BUYLIMIT : _ExpertOrdersBuyLimit++ ; break;
case OP_SELLLIMIT : _ExpertOrdersSellLimit++ ; break;
}
} // if (OrderMagicNumber() == magic && OrderSymbol() == Symbol() )
} // else
} // for ( int z = 0; z < _OrdersTotal; z ++ )
// изменяем размеры массивов под кол-во позиций, принадлежащих эксперту + одна
// (если _ExpertOrdersTotal = 0, меняем размер массивов на 1)
temp_value = MathMax( _ExpertOrdersTotal+1, 1 );
ArrayResize( _OrderTicket, temp_value );
ArrayResize( _OrderType, temp_value );
ArrayResize( _OrderLots, temp_value );
ArrayResize( _OrderOpenPrice, temp_value );
ArrayResize( _OrderStopLoss, temp_value );
ArrayResize( _OrderTakeProfit, temp_value );
ArrayResize( _OrderOpenTime, temp_value );
ArrayResize( _OrderProfit, temp_value );
ArrayResize( _OrderSwap, temp_value );
ArrayResize( _OrderCommission, temp_value );
ArrayResize( _OrderComment, temp_value );
ArrayResize( _OrderExpiration, temp_value );

_OrderTicket[_ExpertOrdersTotal] = 99999999;// при сортировке этот пустой элемент будет последним
ArraySort(_OrderTicket); // получим хронологический порядок...
//------------------------------------------------------------------------------------------------------------------------
for ( z = 0; z < _ExpertOrdersTotal; z ++ )
{
if ( !OrderSelect( _OrderTicket[z], SELECT_BY_TICKET ) )
{
_GetLastError = GetLastError();
Print("OrderSelect( ", _OrderTicket[z], ", SELECT_BY_TICKET ) - Error #", _GetLastError );
continue;
}
// заполняем остальные массивы
_OrderType [z] = OrderType();
_OrderLots [z] = NormalizeDouble( OrderLots(), 2 );
_OrderOpenPrice [z] = NormalizeDouble( OrderOpenPrice(), Digits );
_OrderStopLoss [z] = NormalizeDouble( OrderStopLoss(), Digits );
_OrderTakeProfit [z] = NormalizeDouble( OrderTakeProfit(), Digits );
_OrderOpenTime [z] = OrderOpenTime();
_OrderProfit [z] = NormalizeDouble( OrderProfit(), 2 );
_OrderSwap [z] = NormalizeDouble( OrderSwap(), 2 );
_OrderCommission [z] = NormalizeDouble( OrderCommission(), 2 );
_OrderComment [z] = OrderComment();
_OrderExpiration [z] = OrderExpiration();
_OrderMagicNumber [z] = OrderMagicNumber();

}
//------------------------------------------------------------------------------------------------------------------------
return;
} // AllOrdersInit( int magic )
//+------------------------------------------------------------------+
//| SetFractalsValue.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
void SetFractalsValue()
{
datetime FractalUpperTimeOld = FractalUpperTime;
datetime FractalLowerTimeOld = FractalLowerTime;

FractalUpperValue = 0;
FractalLowerValue = 0;
//---
int i = 0;
while (FractalUpperValue == 0)
{
FractalUpperValue = iFractals(NULL, 0, MODE_UPPER, i);
i++;
}
int FractalUpperBar = i - 1;
//---
i = 0;
while (FractalLowerValue == 0)
{
FractalLowerValue = iFractals(NULL, 0, MODE_LOWER, i);
i++;
}
int FractalLowerBar = i - 1;
//---
if (ObjectFind("FractalUpper")<0)
{
ObjectCreate("FractalUpper",OBJ_TREND,0,Time[FractalUpperBar+1],FractalUpperValue,Time[FractalUpperBar-1],FractalUpperValue);
ObjectSet("FractalUpper",OBJPROP_COLOR,Blue);
ObjectSet("FractalUpper",OBJPROP_STYLE,STYLE_SOLID);
}
FractalUpperTime = Time[FractalUpperBar];
if (FractalUpperTime != FractalUpperTimeOld)
{
if (Bid > FractalUpperValue){FractalUpperHit = true; ObjectSet("FractalUpper",OBJPROP_COLOR,White);}

else {FractalUpperHit = false; ObjectSet("FractalUpper",OBJPROP_COLOR,Blue); }

ObjectMove("FractalUpper",0,Time[FractalUpperBar+1],FractalUpperValue);
ObjectMove("FractalUpper",1,Time[FractalUpperBar-1],FractalUpperValue);
}
//---
//---
if (ObjectFind("FractalLower")<0)
{
ObjectCreate("FractalLower",OBJ_TREND,0,Time[FractalLowerBar+1],FractalLowerValue,Time[FractalLowerBar-1],FractalLowerValue);
ObjectSet("FractalLower",OBJPROP_COLOR,Red);
ObjectSet("FractalLower",OBJPROP_STYLE,STYLE_SOLID);
}
FractalLowerTime = Time[FractalLowerBar];
if (FractalLowerTime != FractalLowerTimeOld)
{
if (Bid < FractalLowerValue) {FractalLowerHit = true; ObjectSet("FractalLower",OBJPROP_COLOR,White);}
else {FractalLowerHit = false; ObjectSet("FractalLower",OBJPROP_COLOR,Red); }

ObjectMove("FractalLower",0,Time[FractalLowerBar+1],FractalLowerValue);
ObjectMove("FractalLower",1,Time[FractalLowerBar-1],FractalLowerValue);
}
//---
} // void SetFractalsValue()
//+------------------------------------------------------------------+
//| GetJTLCloseLevelTrend.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
void GetJTLCloseLevelTrend()
{
Jaw_0 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORJAW,0);
Teeth_0 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORTEETH,0);
Lips_0 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORLIPS,0);

Jaw_1 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORJAW,1);
Teeth_1 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORTEETH,1);
Lips_1 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORLIPS,1);

Jaw_2 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORJAW,2);
Teeth_2 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORTEETH,2);
Lips_2 =
iAlligator(NULL,0,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied_price,MODE_GATORLIPS,2);

if (CloseAllonLIPS) CloseLevel = Lips_1;
if (CloseAllonTEETH) CloseLevel = Teeth_1;
if (CloseAllonJAW) CloseLevel = Jaw_1;

if (Lips_0 > Teeth_0 && Teeth_0 > Jaw_0) TrendUp0 = true; else TrendUp0 = false;
if (Lips_0 < Teeth_0 && Teeth_0 < Jaw_0) TrendDown0 = true; else TrendDown0 = false;

if (Lips_1 > Teeth_1 && Teeth_1 > Jaw_1) TrendUp1 = true; else TrendUp1 = false;
if (Lips_1 < Teeth_1 && Teeth_1 < Jaw_1) TrendDown1 = true; else TrendDown1 = false;

if (Lips_2 > Teeth_2 && Teeth_2 > Jaw_2) TrendUp2 = true; else TrendUp2 = false;
if (Lips_2 < Teeth_2 && Teeth_2 < Jaw_2) TrendDown2 = true; else TrendDown2 = false;

return;

} // void GetJawTeethLips()
//+------------------------------------------------------------------+
//| GetZeroTargetLines.mq4 |
//| Copyright © 2010, "more" |
//| "mailto:tradertobe@gmail.com |
//+------------------------------------------------------------------+
int GetZeroTargetLines()
{
if (_ExpertOrdersTotal == 0)
{
ObjectDelete("ZeroTargetPrice");
ObjectDelete("ProfitTargetPrice");
return;
}
double sum=0;
double sum1=0;
double ZeroTargetPriceOld;
double ProfitTargetPriceOld;
ZeroTargetPriceOld = ZeroTargetPrice;
ProfitTargetPriceOld = ProfitTargetPrice;
for (i=0; i < _ExpertOrdersTotal; i++)
{
if (_OrderType[i] == OP_BUY)
{
sum = sum + _OrderLots[i] * _OrderOpenPrice[i] * TicValue;
sum1 = sum1 + _OrderLots[i] * TicValue ;
}
if (_OrderType[i] == OP_SELL)
{
sum = sum - _OrderLots[i] * _OrderOpenPrice[i] * TicValue;
sum1 = sum1 - _OrderLots[i] * TicValue ;
}
} // for (i=0; i < _ExpertOrdersTotal; i++)
if (sum1 == 0) return;
//---
ZeroTargetPrice = (ZeroTarget * Point + sum)/sum1;
ZeroTargetPrice = NormalizeDouble(ZeroTargetPrice,Digits);
if (ObjectFind("ZeroTargetPrice")<0)
{
ObjectCreate("ZeroTargetPrice",OBJ_HLINE,0,D'2007.05.01 00:00:00',ZeroTargetPrice);
ObjectSet ("ZeroTargetPrice",OBJPROP_COLOR,White);
ObjectSet ("ZeroTargetPrice",OBJPROP_STYLE,STYLE_SOLID);
}
if (ZeroTargetPrice != ZeroTargetPriceOld)
{
PlaySound("Ku_ku");
ObjectMove("ZeroTargetPrice",0,D'2007.05.01 00:00:00', ZeroTargetPrice);
}
//---
if (ProfitTarget == 0) return;
ProfitTargetPrice = (ProfitTarget * Point + sum)/sum1;
ProfitTargetPrice = NormalizeDouble(ProfitTargetPrice,Digits);
if (ObjectFind("ProfitTargetPrice")<0)
{
ObjectCreate("ProfitTargetPrice",OBJ_HLINE,0,D'2007.05.01 00:00:00',ProfitTargetPrice);
ObjectSet ("ProfitTargetPrice",OBJPROP_COLOR,Gold);
ObjectSet ("ProfitTargetPrice",OBJPROP_STYLE,STYLE_SOLID);
}
if (ProfitTargetPrice != ProfitTargetPriceOld)
{
PlaySound("Ku_ku");
ObjectMove("ProfitTargetPrice",0,D'2007.05.01 00:00:00', ProfitTargetPrice);
}
//---
return(0);
} // GetZeroTargetLines
//+------------------------------------------------------------------+
//| ServiceFunctions.mq4 |
//| Copyright © 2010, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
//http://www.mql4.com/ru/users/bstone -Крамарь Роман - автор четырех, следующих ниже функций
//+------------------------------------------------------------------+
//| helper functions - Крамарь Роман
//+------------------------------------------------------------------+

int sign( double v )
{
if( v < 0 ) return( -1 );
return( 1 );
}

//+------------------------------------------------------------------+
double iif( bool condition, double ifTrue, double ifFalse )
{
if( condition ) return( ifTrue );

return( ifFalse );
}

//+------------------------------------------------------------------+
string iifStr( bool condition, string ifTrue, string ifFalse )
{
if( condition ) return( ifTrue );

return( ifFalse );
}

//+------------------------------------------------------------------+
int orderDirection()
{
return( 1 - 2 * ( OrderType() % 2 ) );
}
//------------------------------------------------------------------------------------------------------------------------
ZZZEROXXX
768
ZZZEROXXX 2011.02.15 18:28  

Благодарю! Ну насчет мегапрофитности незнаю. У меня на евробаксе H1 с 2009 года все закончилось обвалом депо 13.03.2009 )) Настройки не менял.


не исключаю кривость своих ручонок =))) канечно

Sergey Sartakov
1287
Sergey Sartakov 2011.02.15 20:21  
ZZZEROXXX:

Благодарю! Ну насчет мегапрофитности незнаю. У меня на евробаксе H1 с 2009 года все закончилось обвалом депо 13.03.2009 )) Настройки не менял.


не исключаю кривость своих ручонок =))) канечно

Попробуй на Н4.
MQL4 Comments
16319
MQL4 Comments 2011.02.15 21:22  

Браво more! Действительно чудо! По этой стратегии трудно торговать на волатильном рынке. Попробовал на золоте всё получилось. Эксперт получился великолепным, поздравляю. Погоняю на демо.

Strategy Tester Report
BILL_VILJAMS_1_1
Символ GOLD ()
Период День (D1) 2010.01.04 00:00 - 2011.02.11 00:00 (2010.01.04 - 2011.02.12)
Модель Все тики (наиболее точный метод на основе всех наименьших доступных таймфреймов)
Параметры TradeAllowed=true; ProfitTarget=1000; MagicNumber=5; Lot=1; TakeProfit=0; StopLoss=0; Stop_0=0; Stop_0_Zero=300; ZeroTarget=100; Delta=1; CloseAllonLIPS=false; CloseAllonTEETH=true; CloseAllonJAW=false; CloseAllonProfitValue=1000000; CloseForced=false; OpenBuyOnly=false; OpenSellOnly=false;
Баров в истории 1266 Смоделировано тиков 681563 Качество моделирования 50.45%
Ошибки рассогласования графиков 0
Начальный депозит 10000.00
Чистая прибыль 15091.03 Общая прибыль 16411.03 Общий убыток -1320.00
Прибыльность 12.43 Матожидание выигрыша 335.36
Абсолютная просадка 1870.11 Максимальная просадка 7380.96 (45.16%) Относительная просадка 45.16% (7380.96)
Всего сделок 45 Короткие позиции (% выигравших) 16 (100.00%) Длинные позиции (% выигравших) 29 (93.10%)
Прибыльные сделки (% от всех) 43 (95.56%) Убыточные сделки (% от всех) 2 (4.44%)
Самая большая прибыльная сделка 1010.00 убыточная сделка -1230.00
Средняя прибыльная сделка 381.65 убыточная сделка -660.00
Максимальное количество непрерывных выигрышей (прибыль) 42 (15401.26) непрерывных проигрышей (убыток) 1 (-1230.00)
Максимальная непрерывная прибыль (число выигрышей) 15401.26 (42) непрерывный убыток (число проигрышей) -1230.00 (1)
Средний непрерывный выигрыш 22 непрерывный проигрыш 1

Время Тип Ордер Объём Цена S / L T / P Прибыль Баланс
1 2010.01.07 00:00 buy 1 1.00 1139.40 0.00 0.00
2 2010.01.11 00:00 modify 1 1.00 1139.40 1139.50 0.00
3 2010.01.11 00:13 close 1 1.00 1149.50 1139.50 0.00 1009.78 11009.78
4 2010.01.11 00:13 buy 2 1.00 1150.40 0.00 0.00
5 2010.01.11 00:14 close 2 1.00 1149.50 0.00 0.00 -90.00 10919.78
6 2010.01.20 17:17 sell 3 1.00 1119.50 0.00 0.00
7 2010.01.20 17:55 modify 3 1.00 1119.50 1119.40 0.00
8 2010.01.20 18:38 close 3 1.00 1109.40 1119.40 0.00 1010.00 11929.78
9 2010.01.28 04:20 sell 4 1.00 1083.00 0.00 0.00
10 2010.01.28 18:32 modify 4 1.00 1083.00 1082.90 0.00
11 2010.01.28 19:34 s/l 4 1.00 1082.90 1082.90 0.00 10.00 11939.78
12 2010.02.04 18:24 sell 5 1.00 1075.20 0.00 0.00
13 2010.02.04 18:27 modify 5 1.00 1075.20 1075.10 0.00
14 2010.02.04 18:32 close 5 1.00 1065.10 1075.10 0.00 1010.00 12949.78
15 2010.02.15 10:30 buy 6 1.00 1100.00 0.00 0.00
16 2010.02.15 14:06 modify 6 1.00 1100.00 1100.10 0.00
17 2010.02.15 18:24 s/l 6 1.00 1100.10 1100.10 0.00 10.00 12959.78
18 2010.02.17 14:30 buy 7 1.00 1127.20 0.00 0.00
19 2010.02.22 02:00 modify 7 1.00 1127.20 1127.30 0.00
20 2010.02.22 05:48 s/l 7 1.00 1127.30 1127.30 0.00 9.46 12969.24
21 2010.02.22 08:18 buy 8 1.00 1129.20 0.00 0.00
22 2010.03.02 18:30 buy 9 1.00 1133.10 0.00 0.00
23 2010.03.02 18:32 modify 8 1.00 1129.20 1131.20 0.00
24 2010.03.02 18:32 modify 9 1.00 1133.10 1131.20 0.00
25 2010.03.02 19:21 close 8 1.00 1136.20 1131.20 0.00 699.14 13668.38
26 2010.03.02 19:21 close 9 1.00 1136.20 1131.20 0.00 310.00 13978.38
27 2010.03.22 16:04 sell 10 1.00 1099.30 0.00 0.00
28 2010.03.22 16:14 modify 10 1.00 1099.30 1099.20 0.00
29 2010.03.22 17:47 s/l 10 1.00 1099.20 1099.20 0.00 10.00 13988.38
30 2010.03.24 14:24 sell 11 1.00 1093.30 0.00 0.00
31 2010.03.24 21:55 modify 11 1.00 1093.30 1093.20 0.00
32 2010.03.25 10:01 s/l 11 1.00 1093.20 1093.20 0.00 10.14 13998.51
33 2010.03.31 17:46 buy 12 1.00 1116.90 0.00 0.00
34 2010.04.01 13:47 modify 12 1.00 1116.90 1117.00 0.00
35 2010.04.01 17:51 close 12 1.00 1127.00 1117.00 0.00 1009.68 15008.19
36 2010.04.05 12:19 buy 13 1.00 1130.20 0.00 0.00
37 2010.04.05 18:35 modify 13 1.00 1130.20 1130.30 0.00
38 2010.04.06 02:31 s/l 13 1.00 1130.30 1130.30 0.00 9.89 15018.08
39 2010.04.06 17:48 buy 14 1.00 1135.30 0.00 0.00
40 2010.04.06 18:33 modify 14 1.00 1135.30 1135.40 0.00
41 2010.04.06 22:30 s/l 14 1.00 1135.40 1135.40 0.00 10.00 15028.08
42 2010.05.07 20:00 buy 15 1.00 1210.50 0.00 0.00
43 2010.05.11 13:10 buy 16 1.00 1213.30 0.00 0.00
44 2010.05.11 13:13 modify 15 1.00 1210.50 1211.95 0.00
45 2010.05.11 13:13 modify 16 1.00 1213.30 1211.95 0.00
46 2010.05.11 13:49 close 15 1.00 1217.00 1211.95 0.00 649.77 15677.84
47 2010.05.11 13:49 close 16 1.00 1217.00 1211.95 0.00 370.00 16047.84
48 2010.05.14 14:33 buy 17 1.00 1250.40 0.00 0.00
49 2010.06.08 12:14 buy 18 1.00 1251.40 0.00 0.00
50 2010.06.18 13:49 buy 19 1.00 1253.50 0.00 0.00
51 2010.06.18 13:50 modify 17 1.00 1250.40 1251.80 0.00
52 2010.06.18 13:50 modify 18 1.00 1251.40 1251.80 0.00
53 2010.06.18 13:50 modify 19 1.00 1253.50 1251.80 0.00
54 2010.06.18 13:57 close 17 1.00 1255.20 1251.80 0.00 475.84 16523.69
55 2010.06.18 13:57 close 18 1.00 1255.20 1251.80 0.00 378.56 16902.25
56 2010.06.18 13:57 close 19 1.00 1255.20 1251.80 0.00 170.00 17072.25
57 2010.07.01 16:00 sell 20 1.00 1209.90 0.00 0.00
58 2010.07.01 21:16 modify 20 1.00 1209.90 1209.80 0.00
59 2010.07.01 22:32 close 20 1.00 1199.80 1209.80 0.00 1010.00 18082.25
60 2010.07.06 17:52 sell 21 1.00 1196.60 0.00 0.00
61 2010.07.06 18:30 modify 21 1.00 1196.60 1196.50 0.00
62 2010.07.06 20:10 s/l 21 1.00 1196.50 1196.50 0.00 10.00 18092.25
63 2010.07.19 14:35 sell 22 1.00 1185.10 0.00 0.00
64 2010.07.19 18:24 modify 22 1.00 1185.10 1185.00 0.00
65 2010.07.19 21:50 s/l 22 1.00 1185.00 1185.00 0.00 10.00 18102.25
66 2010.07.27 17:15 sell 23 1.00 1176.40 0.00 0.00
67 2010.07.27 17:50 modify 23 1.00 1176.40 1176.30 0.00
68 2010.07.27 18:29 close 23 1.00 1166.30 1176.30 0.00 1010.00 19112.25
69 2010.08.06 13:56 buy 24 1.00 1204.90 0.00 0.00
70 2010.08.06 14:36 modify 24 1.00 1204.90 1205.00 0.00
71 2010.08.06 15:29 s/l 24 1.00 1205.00 1205.00 0.00 10.00 19122.25
72 2010.08.12 13:57 buy 25 1.00 1212.80 0.00 0.00
73 2010.08.12 14:37 modify 25 1.00 1212.80 1212.90 0.00
74 2010.08.12 15:27 s/l 25 1.00 1212.90 1212.90 0.00 10.00 19132.25
75 2010.08.25 10:28 buy 26 1.00 1239.50 0.00 0.00
76 2010.08.25 22:41 modify 26 1.00 1239.50 1239.60 0.00
77 2010.08.26 00:06 s/l 26 1.00 1239.60 1239.60 0.00 9.64 19141.89
78 2010.08.31 14:37 buy 27 1.00 1246.50 0.00 0.00
79 2010.08.31 18:09 modify 27 1.00 1246.50 1246.60 0.00
80 2010.08.31 22:32 s/l 27 1.00 1246.60 1246.60 0.00 10.00 19151.89
81 2010.09.07 13:57 buy 28 1.00 1256.70 0.00 0.00
82 2010.09.07 14:37 modify 28 1.00 1256.70 1256.80 0.00
83 2010.09.07 15:31 s/l 28 1.00 1256.80 1256.80 0.00 10.00 19161.89
84 2010.09.14 17:12 buy 29 1.00 1264.40 0.00 0.00
85 2010.09.14 17:48 modify 29 1.00 1264.40 1264.50 0.00
86 2010.09.14 18:34 close 29 1.00 1274.50 1264.50 0.00 1010.00 20171.89
87 2010.09.16 13:16 buy 30 1.00 1276.80 0.00 0.00
88 2010.09.17 08:25 modify 30 1.00 1276.80 1276.90 0.00
89 2010.09.17 14:32 s/l 30 1.00 1276.90 1276.90 0.00 9.88 20181.76
90 2010.09.24 09:58 buy 31 1.00 1298.20 0.00 0.00
91 2010.09.28 17:51 modify 31 1.00 1298.20 1298.30 0.00
92 2010.09.28 18:33 close 31 1.00 1308.30 1298.30 0.00 1009.75 21191.51
93 2010.10.05 09:16 buy 32 1.00 1322.60 0.00 0.00
94 2010.10.05 09:58 modify 32 1.00 1322.60 1322.70 0.00
95 2010.10.05 17:07 close 32 1.00 1332.70 1322.70 0.00 1010.00 22201.51
96 2010.10.13 17:46 buy 33 1.00 1366.90 0.00 0.00
97 2010.10.13 17:56 modify 33 1.00 1366.90 1367.00 0.00
98 2010.10.14 03:36 close 33 1.00 1377.00 1367.00 0.00 1009.60 23211.11
99 2010.10.21 18:38 sell 34 1.00 1329.20 0.00 0.00
100 2010.10.21 19:36 modify 34 1.00 1329.20 1329.10 0.00
101 2010.10.22 01:15 s/l 34 1.00 1329.10 1329.10 0.00 10.06 23221.17
102 2010.10.22 01:27 sell 35 1.00 1325.90 0.00 0.00
103 2010.10.22 10:26 modify 35 1.00 1325.90 1325.80 0.00
104 2010.10.22 14:38 s/l 35 1.00 1325.80 1325.80 0.00 10.00 23231.17
105 2010.11.04 13:12 buy 36 1.00 1367.80 0.00 0.00
106 2010.11.04 15:05 modify 36 1.00 1367.80 1367.90 0.00
107 2010.11.04 15:28 close 36 1.00 1377.90 1367.90 0.00 1010.00 24241.17
108 2010.11.30 15:36 buy 37 1.00 1384.50 0.00 0.00
109 2010.11.30 18:28 modify 37 1.00 1384.50 1384.60 0.00
110 2010.11.30 21:28 s/l 37 1.00 1384.60 1384.60 0.00 10.00 24251.17
111 2010.12.16 16:18 sell 38 1.00 1372.30 0.00 0.00
112 2010.12.16 16:48 modify 38 1.00 1372.30 1372.20 0.00
113 2010.12.16 18:50 s/l 38 1.00 1372.20 1372.20 0.00 10.00 24261.17
114 2010.12.28 07:50 buy 39 1.00 1394.10 0.00 0.00
115 2010.12.28 13:13 modify 39 1.00 1394.10 1394.20 0.00
116 2010.12.28 15:18 close 39 1.00 1404.20 1394.20 0.00 1010.00 25271.17
117 2011.01.05 16:14 sell 40 1.00 1373.20 0.00 0.00
118 2011.01.05 16:19 modify 40 1.00 1373.20 1373.10 0.00
119 2011.01.05 16:27 s/l 40 1.00 1373.10 1373.10 0.00 10.00 25281.17
120 2011.01.07 10:31 sell 41 1.00 1364.90 0.00 0.00
121 2011.01.07 11:39 modify 41 1.00 1364.90 1364.80 0.00
122 2011.01.07 15:37 s/l 41 1.00 1364.80 1364.80 0.00 10.00 25291.17
123 2011.01.20 15:09 sell 42 1.00 1356.00 0.00 0.00
124 2011.01.20 15:34 modify 42 1.00 1356.00 1355.90 0.00
125 2011.01.20 17:15 close 42 1.00 1345.90 1355.90 0.00 1010.00 26301.17
126 2011.01.27 18:22 sell 43 1.00 1323.60 0.00 0.00
127 2011.01.27 18:31 modify 43 1.00 1323.60 1323.50 0.00
128 2011.01.27 18:44 s/l 43 1.00 1323.50 1323.50 0.00 10.00 26311.17
129 2011.02.08 15:32 buy 44 1.00 1360.20 0.00 0.00
130 2011.02.08 15:35 modify 44 1.00 1360.20 1360.30 0.00
131 2011.02.09 18:23 s/l 44 1.00 1360.30 1360.30 0.00 9.87 26321.03
132 2011.02.11 15:34 buy 45 1.00 1370.10 0.00 0.00

ZZZEROXXX
768
ZZZEROXXX 2011.02.15 21:22  
а AO, AC, Gator - используются в принятии решения? Просто они отрисовываются если нажать "открыть график" после теста. Но вы вроде бы пишите что не используются?
Sergey Sartakov
1287
Sergey Sartakov 2011.02.16 02:23  
ZZZEROXXX:
а AO, AC, Gator - используются в принятии решения? Просто они отрисовываются если нажать "открыть график" после теста. Но вы вроде бы пишите что не используются?
Используются только iFractals(...) и iAlligator(...).
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий