Уважаемый 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
Не оптимизируеися. Не торгует (в тестере).
Подскажите, что исправить. Хочется ваше чудо в деле посмотреть.
Уважаемый 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.
Послал вам в "сообщения" полную сборку этого советника, немного поправил по сравнению с тем, что выложен здесь...
Здравствуйте more,
скажите, трал вы не используйте ?
а почему сдесь исправленную не выложить. кто тестил выкладывайте картинку
Выкладываю.
//+------------------------------------------------------------------+//| 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 ) );
}
//------------------------------------------------------------------------------------------------------------------------
Браво more! Действительно чудо! По этой стратегии трудно торговать на волатильном рынке. Попробовал на золоте всё получилось. Эксперт получился великолепным, поздравляю. Погоняю на демо.
Символ | 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 |
а AO, AC, Gator - используются в принятии решения? Просто они отрисовываются если нажать "открыть график" после теста. Но вы вроде бы пишите что не используются?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
BILL_VILJAMS_BC.mq4 - Чудо-советник по Биллу Вильямсу:
Author: Sergey Sartakov