#property copyright"Copyright 2010, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"//-------------------------------------------------------------------//-------------------------------------------------------------------#include <Trade\Trade.mqh>
//--- input parametersinputint StopLoss=-100; // Stop Loss$//input int TakeProfit=100; // Take Profit//input int KD_Period=9; // KD Periodinputint K_Period=9; // K Periodinputint D_Period=3; // D Period//input int MA_Period=8; // Moving Average Periodinputint EA_Magic=12345; // EA Magic Number//input double Adx_Min=22.0; // Minimum ADX Value//---//---input double Lot=0.01; // Lots to Tradeinputdouble MaxPosition=3.00; //Max positioninputdouble P1=0.12; //P1 position1inputdouble P2=0.32;
inputdouble P3=0.77;
inputdouble P4=1.92;
inputdouble P5=2.85;
inputdouble P6=3.57;
//inputdouble PF1=10; //PF1 profit1inputdouble PF2=50;
inputdouble PF3=100;
inputdouble PF4=500;
inputdouble PF5=800;
inputdouble PF6=1500;
////--- Other parametersint KDHandle; // handle for our stochastic indicator//int maHandle; // handle for our Moving Average indicatordouble K[],D[]; // Dynamic arrays to hold the values of K,D values for each bars//double maVal[]; // Dynamic array to hold the values of Moving Average for each barsdouble p_close; // Variable to store the close value of a barint STP, TKP; // To be used for Stop Loss & Take Profit valuesdouble TTL_profit; //to be used for Total profit//double hisBuyLot=0.05;//double hisSellLot=0.05;double TTLBuy_position;
double TTLSell_position;
int Buytimes; //to be use for buy timesint Selltimes; // to be used for sell timesbool special_close_p=false;
double special_profit=0;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- Get handle for KD indicator
KDHandle=iStochastic(NULL,0,K_Period,D_Period,3,MODE_SMA,STO_LOWHIGH);
//--- Get the handle for Moving Average indicator// maHandle=iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);//--- What if handle returns Invalid Handleif(KDHandle<0)
{
Alert("Error Creating Handles for indicators - error: ",GetLastError(),"!!");
return(-1);
}
//--- Let us handle currency pairs with 5 or 3 digit prices instead of 4//STP = StopLoss;//TKP = TakeProfit;//if(_Digits==5 || _Digits==3)// {// STP = STP*10;// TKP = TKP*10;// }return(0);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- Release our indicator handlesIndicatorRelease(KDHandle);
// IndicatorRelease(maHandle);
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//--- Do we have enough bars to work withif(Bars(_Symbol,_Period)<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
// We will use the static Old_Time variable to serve the bar time.// At each OnTick execution we will check the current bar time with the saved one.// If the bar time isn't equal to the saved time, it indicates that we have a new tick.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
// copying the last bar time to the element New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, the data has been copied successfully
{
if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
{
IsNewBar=true; // if it isn't a first call, the new bar has appearedif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
Old_Time=New_Time[0]; // saving bar time
}
}
else
{
Alert("Error in copying historical times data, error =",GetLastError());
ResetLastError();
return;
}
//--- EA should only check for new trade if we have a new barif(IsNewBar==false)
{
return;
}
//--- Do we have enough bars to work withint Mybars=Bars(_Symbol,_Period);
if(Mybars<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
//--- Define some MQL5 Structures we will use for our tradeMqlTick latest_price; // To be used for getting recent/latest price quotesMqlTradeRequest mrequest; // To be used for sending our trade requestsMqlTradeResult mresult; // To be used to get our trade resultsMqlRates mrate[]; // To be used to store the prices, volumes and spread of each barZeroMemory(mrequest); // Initialization of mrequest structure/*
Let's make sure our arrays values for the Rates, KD Values
is store serially similar to the timeseries array
*/// the rates arraysArraySetAsSeries(mrate,true);
// the KD Kvalues arrayArraySetAsSeries(K,true);
// the KD Dvalues arrayArraySetAsSeries(D,true);
// the ADX values arrays// ArraySetAsSeries(adxVal,true);// the MA-8 values arrays// ArraySetAsSeries(maVal,true);//--- Get the last price quote using the MQL5 MqlTick Structureif(!SymbolInfoTick(_Symbol,latest_price))
{
Alert("Error getting the latest price quote - error:",GetLastError(),"!!");
return;
}
//--- Get the details of the latest 3 bars,default period,if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
{
Alert("Error copying rates/history data - error:",GetLastError(),"!!");
ResetLastError();
return;
}
//--- Copy the new values of our indicators to buffers (arrays) using the handleif(CopyBuffer(KDHandle,0,0,2,K)<0 || CopyBuffer(KDHandle,1,0,2,D)<0)
{
Alert("Error copying Stochastic KD indicator Buffers - error:",GetLastError(),"!!");
ResetLastError();
return;
}
// double Buy_order=0.02; //Buy order double Sell_order=0.02;
//--- we have no errors, so continue//--- Do we have positions opened already?bool Buy_opened=false; // variable to hold the result of Buy opened positionbool Sell_opened=false; // variables to hold the result of Sell opened positionif(PositionSelect(_Symbol)==true) // we have an opened position
{
if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
Buy_opened=true; //It is a Buy//Print("here - " , PositionsTotal());Print("1-Buy_opened - Total Buy position is ", PositionGetDouble(POSITION_VOLUME));
TTLBuy_position=PositionGetDouble(POSITION_VOLUME);
}
elseif(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
Sell_opened=true; // It is a Sell//Print("here - " , PositionsTotal());Print("1-Sell_opened - Total Sell position is ", PositionGetDouble(POSITION_VOLUME));
TTLSell_position=PositionGetDouble(POSITION_VOLUME);
}
}
// Copy the bar close price for the previous bar prior to the current bar, that is Bar 1
p_close=mrate[1].close; // bar 1 close price/*
1. Check for a long/Buy Setup : k/d cross 20
*///--- Declare bool type variables to hold our Buy Conditionsbool Buy_Condition_1 = (K[0]>=D[0] && K[1]<=D[1]); // k>=D and K1<=D1bool Buy_Condition_2 = (K[1]<=20 && D[0]<=20); // k1<=20 and d<=20//--- Check buy condition if(Buy_Condition_1 && Buy_Condition_2)
{
Print("Buy-1:When buy OK, K0 is:",K[0]," D0 is:",D[0]," K1 is:",K[1]," D1 is:",D[1]);
Я распечатал эти переменные кэша и я сказал ранее, то же самое, в то время, когда он должен быть отправлен сигнал, но K / D значение неправильно, но смотреть программу это корректно, является ли это ошибка в MQL5 сделать?
Я вывел эти переменные в кэш и сказал ранее, что это одно и тоже, в то время когда должен быть послан сигнал, но K/D значение неверное, но смотрю программу она корректна, может это ошибка в MQL5?
Вопрос базовый, есть ли проблема в проверке времени бара в нижней части?
//--- Do we have enough bars to work withif(Bars(_Symbol,_Period)<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
// We will use the static Old_Time variable to serve the bar time.// At each OnTick execution we will check the current bar time with the saved one.// If the bar time isn't equal to the saved time, it indicates that we have a new tick.staticdatetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
// copying the last bar time to the element New_Time[0]int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
if(copied>0) // ok, the data has been copied successfully
{
if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time
{
IsNewBar=true; // if it isn't a first call, the new bar has appearedif(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
Old_Time=New_Time[0]; // saving bar time
}
}
else
{
Alert("Error in copying historical times data, error =",GetLastError());
ResetLastError();
return;
}
//--- EA should only check for new trade if we have a new barif(IsNewBar==false)
{
return;
}
//--- Do we have enough bars to work withint Mybars=Bars(_Symbol,_Period);
if(Mybars<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
Я проверил ваш другой ответ, возможно вы правы:Да, сигнал на закрытой свече лучше, так как сигнал на текущей может быть ложным. Хотя есть трейдеры, которые торгуют на открытой свече, возможно, с некоторыми фильтрами.
Восходящий тренд состоит из более высоких максимумов и более высоких минимумов. Трейдеры могут использовать Стохастик для поиска отличных входов с соотношением риска и вознаграждения в точках низкой поддержки в тренде.
Нисходящий тренд состоит из более низких максимумов и более низких минимумов. Трейдеры могут использовать Стохастик для поиска отличных входов с риском для вознаграждения в точках максимумов сопротивления.
Стохастик может быть использован для предупреждения трейдера о необходимости подтянуть стопы, уменьшить размер позиции или зафиксировать прибыль один раз в трендовой сделке.
Трейдеры, торгующие в направлении преобладающего дневного тренда, имеют более высокий процент успеха, чем те, кто торгует против тренда. Одной из самых привлекательных черт рынка Forex являются длинные тренды, которые дают трейдерам возможность заработать сотни пунктов, если они точно рассчитали время входа и использовали защитные стопы для ограничения риска.
Но как трейдеры могут найти место, где следует входить с риском для получения максимальной прибыли?
Мантру "тренд - ваш друг, пока он не закончится" можно найти во многих книгах по трейдингу, но похоже, что многие трейдеры Форекс не сделали тренд своим другом, а в некоторых случаях тренд стал врагом. Вместо того, чтобы получать те пипсы, которые доступны трейдерам, правильно вошедшим в тренд, многие трейдеры оказались на "дающем" конце сделки, теряя пипсы во время борьбы с трендом.
Как люди обращаются к онлайновым службам знакомств, чтобы найти свою идеальную пару, так и трейдеры Форекс могут обратиться к стохастику как к способу сделать тренд своим другом.
При восходящем тренде на дневном графике линии стохастика %K и %D, проходящие ниже горизонтальной линии "20" и возвращающиеся выше линии "20", указывают на то, что коррекция с фиксацией прибыли подходит к концу. Пересечение стохастика вверх также говорит нам о том, что покупатели снова начинают входить в рынок. Кроме того, это свидетельствует о наличии хорошей поддержки.
Как торговать по тренду с помощью стохастика
При торговле по тренду главное - терпение. Слишком ранний вход в тренд может привести к большим просадкам. Слишком поздний вход снижает количество прибыли до завершения свинга.
Используйте индикатор стохастик, чтобы найти тот самый "златовласый" вход - не слишком ранний и не слишком поздний. Как только будет обнаружен сильный восходящий тренд, дождитесь, пока стохастик с настройками 15, 5, 5 перейдет в область перепроданности ниже горизонтальной базовой линии 20. Затем дождитесь, когда линии %K и %D снова поднимутся выше линии 20. Войдите в длинную позицию со стопом, расположенным на несколько пунктов ниже последнего минимума. Установите лимит, по крайней мере, в два раза превышающий размер стопа.
Находясь в позиции восходящего тренда, трейдеры пытаются выжать как можно больше прибыли. Трейдеры обычно фиксируют прибыль по открытой позиции или ставят трейлинг-стоп, как только стохастик переходит в область перекупленности. Важно отметить, что валютная пара Форекс может продолжать достигать новых максимумов, даже если стохастик находится в области перекупленности.
Поэтому в следующий раз, когда вы увидите тренд и не будете знать, как сделать его своим "другом", позвольте индикатору стохастик познакомить вас с ним! Как только эти колебания будут выделены стохастиком, размещение стопов также станет проще. Пересечения стохастика в восходящем тренде могут помочь вам точно определить входы для присоединения к основному тренду.
Это очень хороший советник для новичков - для трейдеров, которые изучают индикатор Stochastic, как он работает. Советник торгует на уровнях перекупленности/перепроданности индикатора Stochastic со следующими параметрами, которые были закодированы, чтобы быть внутри этого советника:
параметры индикатора Stochastic, которые были закодированы в советнике: 5/3/3
уровни перекупленности/перепроданности, которые будут закодированы в советнике: 80/20
"Советник анализирует показания индикатора Stochastic, сигналом на покупку является пересечение основной и сигнальной линий индикатора в зоне перепроданности, сигналом на продажу является пересечение основной и сигнальной линий индикатора в зоне перекупленности."
Кодер предложил набор файлов для этого советника, поэтому мы можем использовать этот советник на таймфрейме EURUSD M15 в соответствии с этим набором файлов/параметров.
Я протестировал советника, чтобы посмотреть, как он работает - пожалуйста, найдите результаты бэктестинга и некоторые графики с идеями об уровнях перекупленности/перепроданности:
Эта книга представляет собой сборник упражнений, охватывающих все основные темы современной теории стохастических процессов и ее приложений, включая финансы, актуарную математику, теорию очередей и теорию риска.
Цель этой книги - предоставить читателю теоретический и практический материал, необходимый для более глубокого понимания основных тем теории стохастических процессов и смежных с ней областей.
Книга разделена на главы в соответствии с различными темами. Каждая глава содержит задачи, подсказки, решения, а также самостоятельную теоретическую часть, в которой приводится весь необходимый материал для решения задач. Также даются ссылки на литературу.
Упражнения имеют различный уровень сложности и варьируются от простых, полезных для студентов, изучающих основные понятия и технику, до очень сложных, раскрывающих некоторые важные теоретические факты и построения.
Данная книга является одним из крупнейших сборников задач по теории стохастических процессов и ее приложениям. Приведенные в книге задачи могут быть полезны студентам и аспирантам, а также специалистам в области теории стохастических процессов.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
на этом рисунке две стрелки должны давать два сигнала, но моя ea не может отправить, почему?
Спасибо angevoyageur!
Я распечатал эти переменные кэша и я сказал ранее, то же самое, в то время, когда он должен быть отправлен сигнал, но K / D значение неправильно, но смотреть программу это корректно, является ли это ошибка в MQL5 сделать?
Спасибо angevoyageur!
Я вывел эти переменные в кэш и сказал ранее, что это одно и тоже, в то время когда должен быть послан сигнал, но K/D значение неверное, но смотрю программу она корректна, может это ошибка в MQL5?
Вопрос базовый, есть ли проблема в проверке времени бара в нижней части?
Это базовый вопрос, есть ли проблемы с проверкой времени в баре?
Кто может мне помочь? Заранее спасибо!
Спасибо,angevoyageur
Я проверил ваш другой ответ, возможно вы правы:Да, сигнал на закрытой свече лучше, так как сигнал на текущей может быть ложным. Хотя есть трейдеры, которые торгуют на открытой свече, возможно, с некоторыми фильтрами.
Я попробую протестировать!
Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий
Индикаторы: Стохастический осциллятор
newdigital, 2013.10.09 07:23
Точное определение входа в трендовую торговлю на Форекс с помощью Стохастика
Трейдеры, торгующие в направлении преобладающего дневного тренда, имеют более высокий процент успеха, чем те, кто торгует против тренда. Одной из самых привлекательных черт рынка Forex являются длинные тренды, которые дают трейдерам возможность заработать сотни пунктов, если они точно рассчитали время входа и использовали защитные стопы для ограничения риска.
Но как трейдеры могут найти место, где следует входить с риском для получения максимальной прибыли?
Мантру "тренд - ваш друг, пока он не закончится" можно найти во многих книгах по трейдингу, но похоже, что многие трейдеры Форекс не сделали тренд своим другом, а в некоторых случаях тренд стал врагом. Вместо того, чтобы получать те пипсы, которые доступны трейдерам, правильно вошедшим в тренд, многие трейдеры оказались на "дающем" конце сделки, теряя пипсы во время борьбы с трендом.
Как люди обращаются к онлайновым службам знакомств, чтобы найти свою идеальную пару, так и трейдеры Форекс могут обратиться к стохастику как к способу сделать тренд своим другом.
При восходящем тренде на дневном графике линии стохастика %K и %D, проходящие ниже горизонтальной линии "20" и возвращающиеся выше линии "20", указывают на то, что коррекция с фиксацией прибыли подходит к концу. Пересечение стохастика вверх также говорит нам о том, что покупатели снова начинают входить в рынок. Кроме того, это свидетельствует о наличии хорошей поддержки.
Как торговать по тренду с помощью стохастика
При торговле по тренду главное - терпение. Слишком ранний вход в тренд может привести к большим просадкам. Слишком поздний вход снижает количество прибыли до завершения свинга.
Используйте индикатор стохастик, чтобы найти тот самый "златовласый" вход - не слишком ранний и не слишком поздний. Как только будет обнаружен сильный восходящий тренд, дождитесь, пока стохастик с настройками 15, 5, 5 перейдет в область перепроданности ниже горизонтальной базовой линии 20. Затем дождитесь, когда линии %K и %D снова поднимутся выше линии 20. Войдите в длинную позицию со стопом, расположенным на несколько пунктов ниже последнего минимума. Установите лимит, по крайней мере, в два раза превышающий размер стопа.
Находясь в позиции восходящего тренда, трейдеры пытаются выжать как можно больше прибыли. Трейдеры обычно фиксируют прибыль по открытой позиции или ставят трейлинг-стоп, как только стохастик переходит в область перекупленности. Важно отметить, что валютная пара Форекс может продолжать достигать новых максимумов, даже если стохастик находится в области перекупленности.
Поэтому в следующий раз, когда вы увидите тренд и не будете знать, как сделать его своим "другом", позвольте индикатору стохастик познакомить вас с ним! Как только эти колебания будут выделены стохастиком, размещение стопов также станет проще. Пересечения стохастика в восходящем тренде могут помочь вам точно определить входы для присоединения к основному тренду.
Форум о трейдинге, автоматических торговых системах и тестировании торговых стратегий
Что-то интересное
Сергей Голубев, 2016.03.28 14:13
Это очень хороший советник для новичков - для трейдеров, которые изучают индикатор Stochastic, как он работает. Советник торгует на уровнях перекупленности/перепроданности индикатора Stochastic со следующими параметрами, которые были закодированы, чтобы быть внутри этого советника:
- параметры индикатора Stochastic, которые были закодированы в советнике: 5/3/3
- уровни перекупленности/перепроданности, которые будут закодированы в советнике: 80/20
ea_Stochastic_system - эксперт для MetaTrader 4Кодер предложил набор файлов для этого советника, поэтому мы можем использовать этот советник на таймфрейме EURUSD M15 в соответствии с этим набором файлов/параметров.
Я протестировал советника, чтобы посмотреть, как он работает - пожалуйста, найдите результаты бэктестинга и некоторые графики с идеями об уровнях перекупленности/перепроданности:
Привет
Недавно я столкнулся с проблемой, связанной со стохастиком.
Я торгую с советником, который написал сам. Одним из условий для входа в сделку на продажу является то, что Stoch Main на баре 1 < Stoch Signal Bar 1.
Из прикрепленного файла для GBPUSD видно, что в 10:00 Stoch Main на баре 1 > Stoch Signal Bar 1, но сделка на продажу была открыта.
Формула, которую я использовал для Stochstic, выглядит следующим образом
double StochMain1T30 = iStochastic(NULL,30,10,10,3,MODE_EMA,0,MODE_MAIN,1); // T30 MODE_MAIN
double StochSignal1T30 = iStochastic(NULL,30,10,10,3,MODE_EMA,0,MODE_SIGNAL,1); // T30 MODE_SIGNAL
Я подозреваю одну возможность: на основании вышеизложенного StochMain1T30 < StochSignal1T30, но это не то, что мы видим на графике.
Не могли бы вы помочь мне объяснить вышесказанное?
Я звонил в Oanda, брокеру, они сказали, что позиция была открыта не ими, а советником.
Спасибо.
Форум о трейдинге, автоматизированных торговых системах и тестировании торговых стратегий
Кое-что интересное для чтения апрель 2014
Сергей Голубев, 2014.04.14 20:48
Теория стохастических процессов: с приложениями к финансовой математике и теории риска
Эта книга представляет собой сборник упражнений, охватывающих все основные темы современной теории стохастических процессов и ее приложений, включая финансы, актуарную математику, теорию очередей и теорию риска.
Цель этой книги - предоставить читателю теоретический и практический материал, необходимый для более глубокого понимания основных тем теории стохастических процессов и смежных с ней областей.
Книга разделена на главы в соответствии с различными темами. Каждая глава содержит задачи, подсказки, решения, а также самостоятельную теоретическую часть, в которой приводится весь необходимый материал для решения задач. Также даются ссылки на литературу.
Упражнения имеют различный уровень сложности и варьируются от простых, полезных для студентов, изучающих основные понятия и технику, до очень сложных, раскрывающих некоторые важные теоретические факты и построения.
Данная книга является одним из крупнейших сборников задач по теории стохастических процессов и ее приложениям. Приведенные в книге задачи могут быть полезны студентам и аспирантам, а также специалистам в области теории стохастических процессов.