Kogelet:
Идея простая - беру два RSI. Быстрый и медленный. Как-только быстрый зашел в погран зону, ждем когда быстрый вернется к уровню 50 и тогда входит в направлении тренда с небольшими целями.
Эксперт дает ошибку 130
#define MAGICMA 20050610
extern double Lots = 0.1;
extern double RSIslowperiod = 5;
extern double RSIfastperiod = 13;
extern double RSIuplevel = 76;
extern double RSIdownlevel = 24;
extern double middlebuy = 50;
extern double middlesell = 50;
extern double stoploss = 50;
extern double takeprofit=50;
//+------------------------------------------------------------------------------+
//| Все переменные обозначены выше. Есть ли поза? Если нет, то функция покажет 0 |
//| Если да, то 1 или -1. |
//+-------------------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Проверка для открытия позиции с первым тиком нового бара. |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double rsi_fast, rsi_fast1;
double rsi_slow, rsi_slow1;
int triggerbuy, triggersell;
int ticket;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get RSI slow and fast
rsi_slow=iRSI(NULL,0,RSIslowperiod,1,0); // rsi slow
rsi_fast=iRSI(NULL,0,RSIfastperiod,1,0);// rsi fast
rsi_slow1=iRSI(NULL,0,RSIslowperiod,1,1); // rsi slow на бар назад
rsi_fast1=iRSI(NULL,0,RSIfastperiod,1,1);// rsi fast на бар назад
// triggerbuy. RSI медленный пересек верхнюю границу, ждем когда быстрый вернется к 50 и покупаем
if (OrdersTotal()==0) triggerbuy=0;
if (rsi_slow1<RSIuplevel && rsi_slow>=RSIuplevel && triggerbuy==0) triggerbuy=1;
if (rsi_fast1>middlebuy && rsi_fast<=middlebuy) triggerbuy++;
// triggersell RSI медленный пересек нижнюю границу, ждем когда быстрый вернется к 50 и продаем
if (OrdersTotal()==0) triggersell=0;
if (rsi_slow1>RSIdownlevel && rsi_slow>=RSIdownlevel && triggersell==0) triggersell++;
if (rsi_fast1<middlesell && rsi_fast>=middlesell) triggersell++;
//---- Условие покупки
if(triggerbuy==2)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid+stoploss*Point, Bid+takeprofit*Point, "buy",MAGICMA,0,Red);
triggerbuy=0;
}
//---- Условие покупки
if(triggersell==2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+stoploss*Point, Ask+takeprofit*Point, "sell",MAGICMA,0,Blue);
triggersell=0;
}
//----
}
void start()
{
//---- check for history and trading
if(Bars<25 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
int err;
{
err=GetLastError();
Print(err);
return(0);
}
//----
}
//+------------------------------------------------------------------+
Идея простая - беру два RSI. Быстрый и медленный. Как-только быстрый зашел в погран зону, ждем когда быстрый вернется к уровню 50 и тогда входит в направлении тренда с небольшими целями.
Эксперт дает ошибку 130
#define MAGICMA 20050610
extern double Lots = 0.1;
extern double RSIslowperiod = 5;
extern double RSIfastperiod = 13;
extern double RSIuplevel = 76;
extern double RSIdownlevel = 24;
extern double middlebuy = 50;
extern double middlesell = 50;
extern double stoploss = 50;
extern double takeprofit=50;
//+------------------------------------------------------------------------------+
//| Все переменные обозначены выше. Есть ли поза? Если нет, то функция покажет 0 |
//| Если да, то 1 или -1. |
//+-------------------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Проверка для открытия позиции с первым тиком нового бара. |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double rsi_fast, rsi_fast1;
double rsi_slow, rsi_slow1;
int triggerbuy, triggersell;
int ticket;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get RSI slow and fast
rsi_slow=iRSI(NULL,0,RSIslowperiod,1,0); // rsi slow
rsi_fast=iRSI(NULL,0,RSIfastperiod,1,0);// rsi fast
rsi_slow1=iRSI(NULL,0,RSIslowperiod,1,1); // rsi slow на бар назад
rsi_fast1=iRSI(NULL,0,RSIfastperiod,1,1);// rsi fast на бар назад
// triggerbuy. RSI медленный пересек верхнюю границу, ждем когда быстрый вернется к 50 и покупаем
if (OrdersTotal()==0) triggerbuy=0;
if (rsi_slow1<RSIuplevel && rsi_slow>=RSIuplevel && triggerbuy==0) triggerbuy=1;
if (rsi_fast1>middlebuy && rsi_fast<=middlebuy) triggerbuy++;
// triggersell RSI медленный пересек нижнюю границу, ждем когда быстрый вернется к 50 и продаем
if (OrdersTotal()==0) triggersell=0;
if (rsi_slow1>RSIdownlevel && rsi_slow>=RSIdownlevel && triggersell==0) triggersell++;
if (rsi_fast1<middlesell && rsi_fast>=middlesell) triggersell++;
//---- Условие покупки
if(triggerbuy==2)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid+stoploss*Point, Bid+takeprofit*Point, "buy",MAGICMA,0,Red);
triggerbuy=0;
}
//---- Условие покупки
if(triggersell==2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+stoploss*Point, Ask+takeprofit*Point, "sell",MAGICMA,0,Blue);
triggersell=0;
}
//----
}
void start()
{
//---- check for history and trading
if(Bars<25 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
int err;
{
err=GetLastError();
Print(err);
return(0);
}
//----
}
//+------------------------------------------------------------------+
Смотри stoploss и takeprofit в OrderSend. И один, и второй по одну сторону от цены открытия.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Эксперт дает ошибку 130
#define MAGICMA 20050610
extern double Lots = 0.1;
extern double RSIslowperiod = 5;
extern double RSIfastperiod = 13;
extern double RSIuplevel = 76;
extern double RSIdownlevel = 24;
extern double middlebuy = 50;
extern double middlesell = 50;
extern double stoploss = 50;
extern double takeprofit=50;
//+------------------------------------------------------------------------------+
//| Все переменные обозначены выше. Есть ли поза? Если нет, то функция покажет 0 |
//| Если да, то 1 или -1. |
//+-------------------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Проверка для открытия позиции с первым тиком нового бара. |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double rsi_fast, rsi_fast1;
double rsi_slow, rsi_slow1;
int triggerbuy, triggersell;
int ticket;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get RSI slow and fast
rsi_slow=iRSI(NULL,0,RSIslowperiod,1,0); // rsi slow
rsi_fast=iRSI(NULL,0,RSIfastperiod,1,0);// rsi fast
rsi_slow1=iRSI(NULL,0,RSIslowperiod,1,1); // rsi slow на бар назад
rsi_fast1=iRSI(NULL,0,RSIfastperiod,1,1);// rsi fast на бар назад
// triggerbuy. RSI медленный пересек верхнюю границу, ждем когда быстрый вернется к 50 и покупаем
if (OrdersTotal()==0) triggerbuy=0;
if (rsi_slow1<RSIuplevel && rsi_slow>=RSIuplevel && triggerbuy==0) triggerbuy=1;
if (rsi_fast1>middlebuy && rsi_fast<=middlebuy) triggerbuy++;
// triggersell RSI медленный пересек нижнюю границу, ждем когда быстрый вернется к 50 и продаем
if (OrdersTotal()==0) triggersell=0;
if (rsi_slow1>RSIdownlevel && rsi_slow>=RSIdownlevel && triggersell==0) triggersell++;
if (rsi_fast1<middlesell && rsi_fast>=middlesell) triggersell++;
//---- Условие покупки
if(triggerbuy==2)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid+stoploss*Point, Bid+takeprofit*Point, "buy",MAGICMA,0,Red);
triggerbuy=0;
}
//---- Условие покупки
if(triggersell==2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+stoploss*Point, Ask+takeprofit*Point, "sell",MAGICMA,0,Blue);
triggersell=0;
}
//----
}
void start()
{
//---- check for history and trading
if(Bars<25 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
int err;
{
err=GetLastError();
Print(err);
return(0);
}
//----
}
//+------------------------------------------------------------------+