Пока об этом не думал.Год советник висит для проверки вшивости . На фунте все го тренды выдержал. ОН как будто бы заранее знает когда начинать торговать. Просадка составила 1,47%.
Пока об этом не думал.Год советник висит для проверки вшивости . На фунте все го тренды выдержал. ОН как будто бы заранее знает когда начинать торговать. Просадка составила 1,47%.
увеличьте лот в 10 раз - прибыль увеличится в 10 раз
Пишем эффективного советника - Продолжение следует.
и так с чего начнём?
1. с каким плечом лучше для советника. - думаю не выше 100
2. Важная функция для советника - я так понимаю лот. От этой функции мы и получаем прибыль.
3. ----
4. ----
итд. ----
какие ещё функции нужны для эффективности советнику?
Начну тогда - если не возражаете -
добавил увеличение лота при следующей позиции (желтым где копался и изменил)
//+------------------------------------------------------------------+//| MACD Sample.mq5 |//| Copyright 2009-2017, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2009-2017, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"5.50"#property description"It is important to make sure that the expert works with a normal"#property description"chart and the user did not make any mistakes setting input"#property description"variables (Lots, TakeProfit, TrailingStop) in our case,"#property description"we check TakeProfit on a chart of more than 2*trend_period bars"#define MACD_MAGIC 1234502//---#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\AccountInfo.mqh>
//+------------------------------------------------------------------+//| ENUM_LOT_RISK |//+------------------------------------------------------------------+enum LotMax
{
Lot=0, // Lots
Lotx2=1, // Lots*2
};
//---input LotMax InpLotRisk =Lotx2; // Lots,- Lots*2inputdouble InpLots =0.01; // Lotsinputint InpMACDOpenLevel =3; // MACD open level (in pips)inputint InpMACDCloseLevel=2; // MACD close level (in pips)inputint InpMATrendPeriod =26; // MA trend period//---int ExtTimeOut=10; // time out in seconds between trade operations//+------------------------------------------------------------------+//| MACD Sample expert class |//+------------------------------------------------------------------+class CSampleExpert
{
protected:
double m_adjusted_point; // point value adjusted for 3 or 5 points
CTrade m_trade; // trading object
CSymbolInfo m_symbol; // symbol info object
CPositionInfo m_position; // trade position object
CAccountInfo m_account; // account info wrapper//--- indicatorsint m_handle_macd; // MACD indicator handleint m_handle_ema; // moving average indicator handle//--- indicator buffersdouble m_buff_MACD_main[]; // MACD indicator main bufferdouble m_buff_MACD_signal[]; // MACD indicator signal bufferdouble m_buff_EMA[]; // EMA indicator buffer//--- indicator data for processingdouble m_macd_current;
double m_macd_previous;
double m_signal_current;
double m_signal_previous;
double m_ema_current;
double m_ema_previous;
//---double m_macd_open_level;
double m_macd_close_level;
datetime ExtPrevBars; // "0" -> D'1970.01.01 00:00';public:
CSampleExpert(void);
~CSampleExpert(void);
bool Init(void);
void Deinit(void);
bool Processing(void);
double OptimizedBuy(void);
double OptimizedSell(void);protected:
bool InitIndicators(void);
bool LongOpened(void);
bool ShortOpened(void);
};
//--- global expert
CSampleExpert ExtExpert;
//+------------------------------------------------------------------+//| Constructor |//+------------------------------------------------------------------+
CSampleExpert::CSampleExpert(void) : m_adjusted_point(0),
m_handle_macd(INVALID_HANDLE),
m_handle_ema(INVALID_HANDLE),
m_macd_current(0),
m_macd_previous(0),
m_signal_current(0),
m_signal_previous(0),
m_ema_current(0),
m_ema_previous(0),
m_macd_open_level(0),
m_macd_close_level(0),
ExtPrevBars(0)
{
ArraySetAsSeries(m_buff_MACD_main,true);
ArraySetAsSeries(m_buff_MACD_signal,true);
ArraySetAsSeries(m_buff_EMA,true);
}
//+------------------------------------------------------------------+//| Destructor |//+------------------------------------------------------------------+
CSampleExpert::~CSampleExpert(void)
{
}
//+------------------------------------------------------------------+//| Calculate optimal lot size |//+------------------------------------------------------------------+double CSampleExpert::OptimizedBuy(void)
{
double PROFIT_BUY=0.00;
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
{
string position_GetSymbol=PositionGetSymbol(i); // GetSymbol позицииif(position_GetSymbol==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_BUY)
{
PROFIT_BUY=PROFIT_BUY+m_position.Select(Symbol());
}
}
}
double Lots=InpLots;
double ab=PROFIT_BUY;
switch(InpLotRisk)
{
case Lot:
Lots=InpLots;
break;
case Lotx2:
if(ab>0 && ab<=1)
Lots=InpLots*2;
if(ab>1 && ab<=2)
Lots=InpLots*4;
if(ab>2 && ab<=3)
Lots=InpLots*8;
if(ab>3)
Lots=InpLots*16;
break;
}
return(Lots);
}
//+------------------------------------------------------------------+//| Calculate optimal lot size |//+------------------------------------------------------------------+double CSampleExpert::OptimizedSell(void)
{
double PROFIT_SELL=0.00;
for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of open positions
{
string position_GetSymbol=PositionGetSymbol(i); // GetSymbol позицииif(position_GetSymbol==m_symbol.Name())
{
if(m_position.PositionType()==POSITION_TYPE_SELL)
{
PROFIT_SELL=PROFIT_SELL+m_position.Select(Symbol());
}
}
}
double Lots=InpLots;
double ab=PROFIT_SELL;
switch(InpLotRisk)
{
case Lot:
Lots=InpLots;
break;
case Lotx2:
if(ab>0 && ab<=1)
Lots=InpLots*2;
if(ab>1 && ab<=2)
Lots=InpLots*4;
if(ab>2 && ab<=3)
Lots=InpLots*8;
if(ab>3)
Lots=InpLots*16;
break;
}
return(Lots);
}
//+------------------------------------------------------------------+//| Initialization and checking for input parameters |//+------------------------------------------------------------------+bool CSampleExpert::Init(void)
{
//--- initialize common information
m_symbol.Name(Symbol()); // symbol
m_trade.SetExpertMagicNumber(MACD_MAGIC); // magic
m_trade.SetMarginMode();
m_trade.SetTypeFillingBySymbol(Symbol());
//--- tuning for 3 or 5 digitsint digits_adjust=1;
if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
digits_adjust=10;
m_adjusted_point=m_symbol.Point()*digits_adjust;
//--- set default deviation for trading in adjusted points
m_macd_open_level =InpMACDOpenLevel*m_adjusted_point;
m_macd_close_level=InpMACDCloseLevel*m_adjusted_point;
//--- set default deviation for trading in adjusted points
m_trade.SetDeviationInPoints(3*digits_adjust);
//---if(!InitIndicators())
return(false);
//--- succeedreturn(true);
}
//+------------------------------------------------------------------+//| Initialization of the indicators |//+------------------------------------------------------------------+bool CSampleExpert::InitIndicators(void)
{
//--- create MACD indicatorif(m_handle_macd==INVALID_HANDLE)
if((m_handle_macd=iMACD(NULL,0,12,26,9,PRICE_CLOSE))==INVALID_HANDLE)
{
printf("Error creating MACD indicator");
return(false);
}
//--- create EMA indicator and add it to collectionif(m_handle_ema==INVALID_HANDLE)
if((m_handle_ema=iMA(NULL,0,InpMATrendPeriod,0,MODE_EMA,PRICE_CLOSE))==INVALID_HANDLE)
{
printf("Error creating EMA indicator");
return(false);
}
//--- succeedreturn(true);
}
//+------------------------------------------------------------------+//| Check for long position opening |//+------------------------------------------------------------------+bool CSampleExpert::LongOpened(void)
{
bool res=false;
//--- check for long position (BUY) possibilityif(m_macd_current<0)
if(m_macd_current>m_signal_current && m_macd_previous<m_signal_previous)
if(MathAbs(m_macd_current)>(m_macd_open_level) && m_ema_current>m_ema_previous)
{
double price=m_symbol.Ask();
//--- check for free moneyif(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_BUY,OptimizedBuy(),price)<0.0)
printf("We have no money. Free Margin = %f",m_account.FreeMargin());
else
{
//--- open positionif(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,OptimizedBuy(),price,0.0,0.0))
printf("Position by %s to be opened",Symbol());
else
{
printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
printf("Open parameters : price=%f",price);
}
}
//--- in any case we must exit from expert
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| Check for short position opening |//+------------------------------------------------------------------+bool CSampleExpert::ShortOpened(void)
{
bool res=false;
//--- check for short position (SELL) possibilityif(m_macd_current>0)
if(m_macd_current<m_signal_current && m_macd_previous>m_signal_previous)
if(m_macd_current>(m_macd_open_level) && m_ema_current<m_ema_previous)
{
double price=m_symbol.Bid();
//--- check for free moneyif(m_account.FreeMarginCheck(Symbol(),ORDER_TYPE_SELL,OptimizedSell(),price)<0.0)
printf("We have no money. Free Margin = %f",m_account.FreeMargin());
else
{
//--- open positionif(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,OptimizedSell(),price,0.0,0.0))
printf("Position by %s to be opened",Symbol());
else
{
printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
printf("Open parameters : price=%f",price);
}
}
//--- in any case we must exit from expert
res=true;
}
//--- resultreturn(res);
}
//+------------------------------------------------------------------+//| main function returns true if any position processed |//+------------------------------------------------------------------+bool CSampleExpert::Processing(void)
{
//--- we work only at the time of the birth of new bardatetime time_0=iTime(m_symbol.Name(),Period(),0);
if(time_0==ExtPrevBars)
return(false);
ExtPrevBars=time_0;
if(!m_symbol.RefreshRates())
{
ExtPrevBars=0;
return(false);
}
//--- refresh indicatorsif(BarsCalculated(m_handle_macd)<2 || BarsCalculated(m_handle_ema)<2)
return(false);
if(CopyBuffer(m_handle_macd,0,0,2,m_buff_MACD_main) !=2 ||
CopyBuffer(m_handle_macd,1,0,2,m_buff_MACD_signal)!=2 ||
CopyBuffer(m_handle_ema,0,0,2,m_buff_EMA) !=2)
{
ExtPrevBars=0;
return(false);
}
// m_indicators.Refresh();//--- to simplify the coding and speed up access//--- data are put into internal variables
m_macd_current =m_buff_MACD_main[0];
m_macd_previous =m_buff_MACD_main[1];
m_signal_current =m_buff_MACD_signal[0];
m_signal_previous=m_buff_MACD_signal[1];
m_ema_current =m_buff_EMA[0];
m_ema_previous =m_buff_EMA[1];
//--- it is important to enter the market correctly,//--- but it is more important to exit it correctly...//--- first check if position exists - try to select it//--- check for long position (BUY) possibilityif(LongOpened())
return(true);
//--- check for short position (SELL) possibilityif(ShortOpened())
return(true);
//--- exit without position processingreturn(false);
}
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit(void)
{
//--- create all necessary objectsif(!ExtExpert.Init())
return(INIT_FAILED);
//--- secceedreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert new tick handling function |//+------------------------------------------------------------------+voidOnTick(void)
{
staticdatetime limit_time=0; // last trade processing time + timeout//--- don't process if timeoutif(TimeCurrent()>=limit_time)
{
//--- check for dataif(Bars(Symbol(),Period())>2*InpMATrendPeriod)
{
//--- change limit time by timeout in seconds if processedif(ExtExpert.Processing())
limit_time=TimeCurrent()+ExtTimeOut;
}
}
}
//+------------------------------------------------------------------+
Все зависит от порядка определения максимума. Классический фрактал - это пять баров, средний - выше (ниже) остальных. Но, на данной картинке максимумы нарисованы не по фракталам.
Сейчас я возьму текущий график с классическими фракталами, построю линию. Погодите немного.
Во. Текущий график евродоллара, часовки. Если отмечать максимумы и минимумы фракталами, то на графике имеются две трендовых линии, обе уже пробиты, момент их построения - отмечен стрелками. В момент пробития - линии обрываются. Намечается третья, нисходящая линия, она будет построена через сегодняшние вчерашние 8-часовой и 18-часовой фракталы. Рисовать ее надо, как только цена опустится ниже 15часового минимума.
На этом примере, что красная, что синия линии тренда построились в тот момент, когда цена находится на уровне равному +/- уровню пробития этой самой линии тренда. Сколько (в пунктах или % волны) можно на этом заработать?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
представь советник что
говорил год назад до сих пор зарабатывает,если можно сказать 50 процентов в год заработок.
на тиках можно
заделай то же самое на месяцы и не парься
спокойно, уверенно и ощутимо
;)
Это я сам))
норм
норП
почему так? На форуме что-то всегда как будто проклевывается ,а потом появляются люди уносящее все в другое русло?
на тиках можно
заделай то же самое на месяцы и не парься
спокойно, уверенно и ощутимо
;)
Пока об этом не думал.Год советник висит для проверки вшивости . На фунте все го тренды выдержал. ОН как будто бы заранее знает когда начинать торговать. Просадка составила 1,47%.
Пока об этом не думал.Год советник висит для проверки вшивости . На фунте все го тренды выдержал. ОН как будто бы заранее знает когда начинать торговать. Просадка составила 1,47%.
увеличьте лот в 10 раз - прибыль увеличится в 10 раз
увеличьте лот в 10 раз - прибыль увеличится в 10 раз
Вабабай , вот какой умный умный мальчик)) А может есть другие варианты?
Пишем эффективного советника - Продолжение следует.
и так с чего начнём?
1. с каким плечом лучше для советника. - думаю не выше 100
2. Важная функция для советника - я так понимаю лот. От этой функции мы и получаем прибыль.
3. ----
4. ----
итд. ----
какие ещё функции нужны для эффективности советнику?
Пишем эффективного советника - Продолжение следует.
и так с чего начнём?
1. с каким плечом лучше для советника. - думаю не выше 100
2. Важная функция для советника - я так понимаю лот. От этой функции мы и получаем прибыль.
3. ----
4. ----
итд. ----
какие ещё функции нужны для эффективности советнику?
Начну тогда - если не возражаете -
добавил увеличение лота при следующей позиции (желтым где копался и изменил)
Все зависит от порядка определения максимума. Классический фрактал - это пять баров, средний - выше (ниже) остальных. Но, на данной картинке максимумы нарисованы не по фракталам.
Сейчас я возьму текущий график с классическими фракталами, построю линию. Погодите немного.
Во. Текущий график евродоллара, часовки. Если отмечать максимумы и минимумы фракталами, то на графике имеются две трендовых линии, обе уже пробиты, момент их построения - отмечен стрелками. В момент пробития - линии обрываются. Намечается третья, нисходящая линия, она будет построена через сегодняшние вчерашние 8-часовой и 18-часовой фракталы. Рисовать ее надо, как только цена опустится ниже 15часового минимума.
На этом примере, что красная, что синия линии тренда построились в тот момент, когда цена находится на уровне равному +/- уровню пробития этой самой линии тренда. Сколько (в пунктах или % волны) можно на этом заработать?
Начну тогда - если не возражаете -
добавил увеличение лота при следующей позиции (желтым где копался и изменил)
это без закрытия результат
Открывать и умножать лоты - это конечно хорошо, как то надо прибыль собирать.
1. надо добавить закрытие ,= к примеру с buy закрыли прибыль - а sell к примеру пусть висят, пока не наступит прибыль.