turtletraderv1_0_1.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «turtletraderv1_0_1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торгового советника для платформы MetaTrader 4, написанный на языке MQL4. Советник автоматизирует процесс принятия торговых решений, используя комбинацию нескольких технических индикаторов и анализ свечных паттернов для определения направления входа в позицию.
В работе используются такие индикаторы, как Stochastic, CCI, RSI, ADX, Momentum, скользящие средние и циклический осциллятор, а также распознаются классические модели японских свечей. Советник оценивает сигналы нескольких источников и формирует итоговое решение о покупке или продаже на основе агрегированных данных.
Поддерживаются ручная и автоматическая установка объёма лота с учётом риска и лимита максимального размера. Встроены средства управления рисками: стоп-лосс, тейк-профит, механизм Мартингейла и восстановление позиции после убытка. Доступны ограничения по времени торговых операций, а также возможность отключить торговлю в направлении покупки или продажи.
Советник работает на таймфрейме M1 для логики выхода из позиций и способен одновременно обрабатывать ордера на текущем символе. При обнаружении убыточного ордера возможен обратный вход с корректировкой размера лота.
Настройки программы
| Настройка | Описание |
|---|---|
| Autor | Автор — Текстовый параметр, содержащий имя автора программы. |
| Desc1 | Описание 1 — Текстовый параметр для дополнительной информации. |
| Desc2 | Описание 2 — Текстовый параметр для дополнительной информации. |
| Desc3 | Описание 3 — Текстовый параметр для дополнительной информации. |
| ShowMarketInfo | Отображение рыночной информации — Переключатель вывода информации о рынке в журнал. |
| Slippage rates (SlipPage) | Проскальзывание — Допустимое проскальзывание в пунктах. |
| Number of lots (Lots) | Размер лота — Фиксированный размер лота при ручном режиме. |
| StopLoss | Стоп-лосс — Фиксированное значение стоп-лосса в пунктах. |
| TakeProfit | Тейк-профит — Фиксированное значение тейк-профита в пунктах. |
| MAGIC | Магический номер — Магический номер для идентификации ордеров, созданных советником. |
| StopLossRecover | Восстановление по стоп-лоссу — Переключатель восстановления убыточной позиции обратным ордером. |
| NotSell | Запрет продажи — Переключатель для отключения входов в позицию продажи. |
| NotBuy | Запрет покупки — Переключатель для отключения входов в позицию покупки. |
| Martingale | Мартингейл — Переключатель механизма Мартингейла при восстановлении убыточных позиций. |
| MartingaleStep | Шаг Мартингейла — Шаг увеличения лота при активном Мартингейле. |
| AutoLots | Автоматический лот — Переключатель автоматического расчёта размера лота на основе баланса, риска и доступной маржи. |
| MAXLots | Максимальный лот — Максимально допустимый размер лота при автоматическом расчёте. |
| SymbolsCount | Количество символов — Количество символов, участвующих в автоматическом расчёте лота. |
| Risk | Коэффициент риска — Коэффициент риска, используемый при автоматическом расчёте лота. |
| PauseMin | Пауза в минутах — Пауза в минутах после закрытия ордера перед следующим входом. |
| FromHourStop1 | Начало часа стоп 1 — Начало временного окна для ограничения торговли (первая группа). |
| ToHourStop1 | Конец часа стоп 1 — Окончание временного окна для ограничения торговли (первая группа). |
| FromHourStop2 | Начало часа стоп 2 — Начало временного окна для ограничения торговли (вторая группа). |
| ToHourStop2 | Конец часа стоп 2 — Окончание временного окна для ограничения торговли (вторая группа). |
| FromHourStop3 | Начало часа стоп 3 — Начало временного окна для ограничения торговли (третья группа). |
| ToHourStop3 | Конец часа стоп 3 — Окончание временного окна для ограничения торговли (третья группа). |
| FromHourStop4 | Начало часа стоп 4 — Начало временного окна для ограничения торговли (четвёртая группа). |
| ToHourStop4 | Конец часа стоп 4 — Окончание временного окна для ограничения торговли (четвёртая группа). |
| StoKperiod | Период K стохастика — Период основной линии стохастика. |
| StoDperiod | Период D стохастика — Период сигнальной линии стохастика. |
| StoSlowing | Замедление стохастика — Параметр замедления стохастика. |
| MASlowTime | Период медленной СС — Период медленной скользящей средней, используемой для фильтрации входов. |
| MAFastTime | Период быстрой СС — Период быстрой скользящей средней, используемой для фильтрации входов. |
| CCITime | Период CCI — Период расчёта индикатора CCI. |
| CHOTime | Период CHO — Период расчёта циклического осциллятора CHO. |
| RSITime | Период RSI — Период расчёта индикатора RSI. |
| ADX | Период ADX — Период расчёта индикатора ADX для определения трендовости рынка. |
| MomentTime | Период Momentum — Период расчёта индикатора Momentum. |
Поиск по коду файла
#define DECISION_BUY 1
#define DECISION_SELL 0
#define DECISION_UNKNOWN -1
#define STC_UNCLEAR 0
#define STC_REVERS_UP 1
#define STC_REVERS_DOWN 2
#define STC_SUPER_UP 3
#define STC_SUPER_DOWN 4
extern string Autor = "Thrinai Chankong";
extern string Desc1 = "If you want to donate me";
extern string Desc2 = "can pay to paypal: t*****i*@hotmail.com";
extern string Desc3 = "Thanks a lot";
extern bool ShowMarketInfo = false;
extern double SlipPage = 1; // Slippage rates
extern double Lots = 0.1; // Number of lots
extern double StopLoss = 0;
extern double TakeProfit = 0;
extern double MAGIC = 12357951;
extern bool StopLossRecover = true;
extern bool NotSell = false;
extern bool NotBuy = false;
extern bool Martingale = false;
extern int MartingaleStep = 0;
extern bool AutoLots = false;
extern double MAXLots = 10;
extern double SymbolsCount = 2;
extern double Risk = 0.7;
extern int PauseMin = 0;
extern int FromHourStop1 = 25;
extern int ToHourStop1 = 25;
extern int FromHourStop2 = 25;
extern int ToHourStop2 = 25;
extern int FromHourStop3 = 25;
extern int ToHourStop3 = 25;
extern int FromHourStop4 = 25;
extern int ToHourStop4 = 25;
extern int StoKperiod=4;
extern int StoDperiod=3;
extern int StoSlowing=3;
extern int MASlowTime = 15;
extern int MAFastTime = 3;
extern int CCITime = 5;
extern int CHOTime=5;
extern int RSITime=6;
extern int ADX=6;
extern int MomentTime=5;
double downArrow[];
double BestPrice1=0;
double BestPrice2=0;
double mMultiply=1;
double BeforeLoss;
double BidPrev = 0;
double AskPrev = 0;
double CHOCurrent;
double CHOPrevious;
int StopLossIndex = 0;
int TakeProfitIndex = 0;
int ToSell=0;
int ToBuy =0;
int FoundOpenedOrder = false;
int Decision;
int PrevDecision;
int ticket,total,cnt;
datetime PauseTo;
static datetime Old_Time=0;
double CHOCurrentExit,CHOPreviousExit,RSICurrentExit,RSIPreviousExit;
double pipe;
double ModeLow;
double ModeHigh;
double ModeTime;
double ModeBid;
double ModeAsk;
double ModePoint;
double ModeDigits;
double ModeSpread;
double ModeStopLevel;
double ModeLotSize;
double ModeTickValue;
double ModeTickSize;
double ModeSwapLong;
double ModeSwapShort;
double ModeStarting;
double ModeExpiration;
double ModeTradeAllowed;
double ModeMinLot;
double ModeLotStep;
double STOCHCurrent;
double STOCHPrevious;
double STOCHSigCurrent;
double STOCHSigPrevious;
int STOCH_Status;
double CCICurrent;
double CCIPrevious;
int CCI_Status;
double RSICurrent;
double RSIPrevious;
int RSI_Status;
int CandleStatus;
int MACDStatus;
double MomentCurrent;
double MomentPrevious;
double P,R,R05,R10,R15,R20,R25,R30,S05,S10,S15,S20,S25,S30;
double StopLossValue=0;
double TakeProfitValue=0;
bool IsNewBar = false;
datetime New_Time[1];
int copied=0;
int GetMarketInfo()
{
ModeLow = MarketInfo(Symbol(), MODE_LOW);
ModeHigh = MarketInfo(Symbol(), MODE_HIGH);
ModeTime = MarketInfo(Symbol(), MODE_TIME);
ModeBid = MarketInfo(Symbol(), MODE_BID);
ModeAsk = MarketInfo(Symbol(), MODE_ASK);
ModePoint = MarketInfo(Symbol(), MODE_POINT);
ModeDigits = MarketInfo(Symbol(), MODE_DIGITS);
ModeSpread = MarketInfo(Symbol(), MODE_SPREAD);
ModeStopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);
ModeLotSize = MarketInfo(Symbol(), MODE_LOTSIZE);
ModeTickValue = MarketInfo(Symbol(), MODE_TICKVALUE);
ModeTickSize = MarketInfo(Symbol(), MODE_TICKSIZE);
ModeSwapLong = MarketInfo(Symbol(), MODE_SWAPLONG);
ModeSwapShort = MarketInfo(Symbol(), MODE_SWAPSHORT);
ModeStarting = MarketInfo(Symbol(), MODE_STARTING);
ModeExpiration = MarketInfo(Symbol(), MODE_EXPIRATION);
ModeTradeAllowed = MarketInfo(Symbol(), MODE_TRADEALLOWED);
ModeMinLot = MarketInfo(Symbol(), MODE_MINLOT);
ModeLotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
if ( ShowMarketInfo == True )
{
Print("ModeLow:",ModeLow);
Print("ModeHigh:",ModeHigh);
Print("ModeTime:",ModeTime);
Print("ModeBid:",ModeBid);
Print("ModeAsk:",ModeAsk);
Print("ModePoint:",ModePoint);
Print("ModeDigits:",ModeDigits);
Print("ModeSpread:",ModeSpread);
Print("ModeStopLevel:",ModeStopLevel);
Print("ModeLotSize:",ModeLotSize);
Print("ModeTickValue:",ModeTickValue);
Print("ModeTickSize:",ModeTickSize);
Print("ModeSwapLong:",ModeSwapLong);
Print("ModeSwapShort:",ModeSwapShort);
Print("ModeStarting:",ModeStarting);
Print("ModeExpiration:",ModeExpiration);
Print("ModeTradeAllowed:",ModeTradeAllowed);
Print("ModeMinLot:",ModeMinLot);
Print("ModeLotStep:",ModeLotStep);
}
return (0);
}
int init()
{
// код доступен только после оплаты
}
int EnterMarket()
{
double MAFastCurrent,MAFastPrev,MASlow,diffMA;
double Lowest,Highest,diffFibo;
double P1000,P000,P236,P382,P500,P618,P786;
int CountLow=0;
int CountHigh=0;
if(Lots == 0)
{
return (0);
}
int h=TimeHour(CurTime());
int hadj=TimeHour(CurTime());
if (((hadj >= FromHourStop1) &&(hadj <= ToHourStop1)) || ((hadj >= FromHourStop2) &&(hadj <= ToHourStop2)) || ((hadj >= FromHourStop3) &&(hadj <= ToHourStop3))|| ((hadj >= FromHourStop4) &&(hadj <= ToHourStop4))) {
return (0);
}
if(CurTime()<PauseTo){
return(0);
}
if(StopLoss>0){
StopLossIndex = StopLoss/Lots;
}
if(TakeProfit>0){
TakeProfitIndex = TakeProfit/Lots;
}
Lowest = Low[iLowest(NULL,0,MODE_LOW,180,1)];
Highest = High[iHighest(NULL,0,MODE_HIGH,180,1)];
diffFibo= Highest-Lowest;
P1000 = Highest;
P000 = Lowest;
P236 = Lowest+(diffFibo*0.236);
P382 = Lowest+(diffFibo*0.382);
P500 = Lowest+(diffFibo*0.5);
P618 = Lowest+(diffFibo*0.618);
P786 = Lowest+(diffFibo*0.786);
AskRSI();
AskStochastic();
AskCCI();
if(Decision==DECISION_BUY && NotBuy==false){
MAFastCurrent=iMA(NULL,0,MAFastTime,0,MODE_SMMA,PRICE_CLOSE,0);
MAFastPrev=iMA(NULL,0,MAFastTime,0,MODE_SMMA,PRICE_CLOSE,1);
MASlow=iMA(NULL,0,MASlowTime,1,MODE_SMMA,PRICE_CLOSE,0);
diffMA = MathAbs(MAFastCurrent-MASlow/Point);
if((MAFastCurrent<MASlow || MAFastCurrent<MAFastPrev) || (diffMA<20)){
return(0);
}
if(STOCHCurrent<88){
if(CCIPrevious>CCICurrent){
return(0);
}
if((RSIPrevious>RSICurrent)|| (RSICurrent>70)){
return(0);
}
}
if(CHOPrevious>CHOCurrent){
return(0);
}
MomentCurrent = iMomentum(NULL,0,MomentTime,PRICE_CLOSE,0);
MomentPrevious = iMomentum(NULL,0,MomentTime,PRICE_CLOSE,1);
if(MomentPrevious>MomentCurrent){
return(0);
}
if(Ask<Highest && Ask>Lowest){
if(Ask>=(P236-(Point*5))&& Ask<=(P236+(Point*5))){
return(0);
}
if(Ask>=(P382-(Point*5))&& Ask<=(P382+(Point*5))){
return(0);
}
if(Ask>=(P500-(Point*5))&&Ask<=(P500+(Point*5))){
return(0);
}
if(Ask>=(P618-(Point*5)) && Ask<=(P618+(Point*5))){
return(0);
}
if(Ask>=(P786-(Point*5))&& Ask<=(P786+(Point*5))){
return(0);
}
}
/* for(int i=1;i<90;i++){
if(iOpen(NULL,0,i)>iClose(NULL,0,i)){
}
if(iOpen(NULL,0,i)<iClose(NULL,0,i)){
if(iClose(NULL,0,i)>CBuy){
CBuy=iClose(NULL,0,i);
}else if(iClose(NULL,0,i)==CBuy){
CountHigh++;
}
if(CountHigh==2){
break;
}
}
}
if(CountHigh>1){
if(CBuy<=Ask){
TradeSell();
return(0);
}
}*/
TradeBuy();
return(0);
}else if(Decision==DECISION_SELL && NotSell==false){
MAFastCurrent=iMA(NULL,0,MAFastTime,0,MODE_SMMA,PRICE_OPEN,0);
MAFastPrev=iMA(NULL,0,MAFastTime,0,MODE_SMMA,PRICE_OPEN,1);
MASlow=iMA(NULL,0,MASlowTime,1,MODE_SMMA,PRICE_OPEN,0);
diffMA = MathAbs(MAFastCurrent-MASlow/Point);
if((MAFastCurrent>MASlow || MAFastCurrent>MAFastPrev) || (diffMA<20)){
return(0);
}
MomentCurrent = iMomentum(NULL,0,MomentTime,PRICE_CLOSE,0);
MomentPrevious = iMomentum(NULL,0,MomentTime,PRICE_CLOSE,1);
if(STOCHCurrent>12){
if(CCIPrevious<CCICurrent){
return(0);
}
if((RSIPrevious<RSICurrent)|| (RSICurrent<30)){
return(0);
}
}
if(CHOPrevious<CHOCurrent){
return(0);
}
if(MomentPrevious<MomentCurrent){
return(0);
}
if(Bid<Highest && Bid>Lowest){
if(Bid>=(P236-(Point*5))&& Bid<=(P236+(Point*5))){
return(0);
}
if(Bid>=(P382-(Point*5))&& Bid<=(P382+(Point*5))){
return(0);
}
if(Bid>=(P500-(Point*5))&&Bid<=(P500+(Point*5))){
return(0);
}
if(Bid>=(P618-(Point*5)) && Bid<=(P618+(Point*5))){
return(0);
}
if(Bid>=(P786-(Point*5))&& Bid<=(P786+(Point*5))){
return(0);
}
}
/*for(i=1;i<90;i++){
if(iOpen(NULL,0,i)>iClose(NULL,0,i)){
if(iClose(NULL,0,i)<CSell){
CSell=iClose(NULL,0,i);
}else if(iClose(NULL,0,i)==CSell){
CountLow++;
}
if(CountLow==2){
break;
}
}
}
if(CountLow>1){
if(CSell>=Bid){
TradeBuy();
return(0);
}
}*/
TradeSell();
return(0);
}
return (0);
}
int TradeBuy(){
if(StopLoss>0){
StopLossValue = Bid-(Point*StopLossIndex*mMultiply);
}
if(TakeProfit>0){
TakeProfitValue = Ask+(Point*TakeProfitIndex*mMultiply);
}
ticket = OrderSend(Symbol(),OP_BUY,Lots*mMultiply,Ask,3,0,0,"TurtleTrader(BUY)",MAGIC,3,Green);
if(ticket > 0){
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
OrderModify(OrderTicket(), OrderOpenPrice(), StopLossValue, TakeProfitValue, 3, Green);
}
PrevDecision=Decision;
Print("Buy order is opened: ",OrderOpenPrice());
}else{
Print("Error opening BUY order:",GetLastError());
}
return(0);
}
int TradeSell(){
if(StopLoss>0){
StopLossValue = Bid+(Point*StopLossIndex*mMultiply);
}
if(TakeProfit>0){
TakeProfitValue = Ask-(Point*TakeProfitIndex*mMultiply);
}
ticket = OrderSend(Symbol(),OP_SELL,Lots*mMultiply,Bid,3,0,0,"TurtleTrader(SELL)",MAGIC,3,Red);
if(ticket > 0){
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
OrderModify(OrderTicket(), OrderOpenPrice(), StopLossValue, TakeProfitValue, 3, Green);
}
PrevDecision=Decision;
Print("Sell order is opened: ",OrderOpenPrice());
}else{
Print("Error opening SELL order:",GetLastError());
}
return(0);
}
int AskStochastic()
{
CHOCurrent = iCustom(NULL,0,"CHO",CHOTime,3,0,1,0);
CHOPrevious = iCustom(NULL,0,"CHO",CHOTime,3,0,1,1);
STOCHCurrent = iStochastic(NULL,0,StoKperiod,StoDperiod,StoSlowing,MODE_SMA,0,MODE_MAIN,0);
STOCHPrevious = iStochastic(NULL,0,StoKperiod,StoDperiod,StoSlowing,MODE_SMA,0,MODE_MAIN,1);
if(STOCHCurrent>50 && STOCHCurrent<88 ){
if(CHOCurrent>10){
STOCH_Status = DECISION_BUY;
}else if(CHOCurrent<-10){
STOCH_Status = DECISION_SELL;
}
}else if(STOCHCurrent<=12){
STOCH_Status = DECISION_SELL;
}else if(STOCHCurrent>=88){
STOCH_Status = DECISION_BUY;
}else if(STOCHCurrent<50 && STOCHCurrent>12){
if(CHOCurrent>10){
STOCH_Status = DECISION_BUY;
}else if(CHOCurrent<-10){
STOCH_Status = DECISION_SELL;
}
}
return (0);
}
int AskCCI()
{
CCICurrent = iCCI(NULL,0,CCITime,PRICE_TYPICAL,0);
CCIPrevious = iCCI(NULL,0,CCITime,PRICE_TYPICAL,1);
if((CCICurrent>CCIPrevious)&&(CCICurrent<75)){
CCI_Status = DECISION_BUY;
}else if((CCICurrent<CCIPrevious)&&(CCICurrent>=-75)){
CCI_Status = DECISION_SELL;
}
return (0);
}
int AskRSI()
{
RSICurrent = iRSI(NULL,0,RSITime,PRICE_CLOSE,0);
RSIPrevious = iRSI(NULL,0,RSITime,PRICE_CLOSE,1);
RSI_Status = DECISION_UNKNOWN;
if(RSICurrent>=50){
RSI_Status = DECISION_BUY;
}else if(RSICurrent<50){
RSI_Status = DECISION_SELL;
}
return (0);
}
int ExitMarket ()
{
CHOCurrentExit = iCustom(NULL,PERIOD_M1,"CHO",CHOTime,3,0,1,0);
CHOPreviousExit = CHOPrevious;
RSICurrentExit Показано первые 50% кода (символов: 18436)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.