[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 67

 

Всем привет

Решил я стать писателем. Захотел написать что нибудь на иностранном языке MQL4. Почитал кое что о нем, ну сюжет родился простенький написать эксперт чтобы открывал позицию sel когда RSI с периодом 8 пересекает 70 и закрывать позицию когда пересекает уровень 30 и чтобы ничего другого не происходило. Написал, вот код

//+------------------------------------------------------------------+
//| 4doc.mq4 |
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Alex"
#property link "http://www.metaquotes.net"

//---- input parameters
extern int PerRSI=8;
extern int MagicNamber=77771;

extern double Lots=1.0;

/+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int
cnt=0,
ticket,
total;
double
rsi_0, // Значен. rsi_0 текущее
rsi_1; // Значен. rsi_1 1й бар
if (Bars<100)
{
Print("bars less than 100");
return(0);
}
rsi_0=iRSI(NULL,0, PerRSI,0,0); // Текущий бар
rsi_1=iRSI(NULL,0, PerRSI,0,1); // Текущий бар плюс 1
total=OrdersTotal();
if(total<1)
if(rsi_0 < rsi_1 && rsi_0 > 70) // Если линия пересекла 70
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My RSI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
RefreshRates();
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL
OrderSymbol()==Symbol()) // инструмент совпадает?
{
if(OrderType()==OP_SELL) // открыта кор позиция
{
if(rsi_0 > rsi_1 && rsi_0 < 30) // Если линия пересекла 30
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрываем позицию
return(0); // выходим

}}}}}

Потестил, все получается в основном как и хотелось. Решил изменить код, чтобы когда ССI – 14 пересекает уровень 100 – открывалась позиция sel, и закрывать позицию когда пересекает уровень – 100. Изменил RSI код под ССI , вот он.

//+------------------------------------------------------------------+
//| CCI-DOC.mq4 |
//| Alex |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Alex"
#property link "http://www.metaquotes.net"

//---- input parameters
extern int PerCCI=14;
extern int MagicNamber=88881;

extern double Lots=1.0;

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int
cnt=0,
ticket,
total;
double
cci_0, // Значен. cci_0 текущее
cci_1; // Значен. cci_1 1й бар
if (Bars<100)
{
Print("bars less than 100");
return(0);
}
cci_0=iRSI(NULL,0, PerCCI,0,0); // Текущий бар
cci_1=iRSI(NULL,0, PerCCI,0,1); // Текущий бар плюс 1
total=OrdersTotal();
if(total<1)
if(cci_0 < cci_1 && cci_0 > 100) // Если линия пересекла 100
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "My CCI", MagicNamber,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
for(cnt=0;cnt<total;cnt++)
{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // это открытая позиция? OP_BUY или OP_SELL
OrderSymbol()==Symbol()) // инструмент совпадает?
{
if(OrderType()==OP_SELL) // открыта кор позиция
{
if(cci_0 > cci_1 && cci_0 < -100) // Если линия пересекла -100
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // закрываем позицию
return(0); // выходим
}}}}}

Стал CCI тестировать….. ну, ничего не происходит, не продает не покупает, в журнале ошибок нет, по окончанию теста открывает график кривой, но это не ССI, а RSI 70-30 с периодом 14….. Может быть кто нибудь из опытных писателей поймет и скажет почему так и как это исправить.

 
pepsi писал(а) >>
тогда на демо в журнале более четко прорисовывется все. Понятнее, где искать ошибку. Самому...

спасибо

 

Ещё раз здравствуйте!!!!!!!

Хотелось бы /неназойливо/;-)) напомнить о своём вопросе на стр. 64 про торговые условия для МАшки... заранее благодарен (за подзатыльник чайнику)

 

Господа, подскажите, если я использую в терминале несколько разных временных чартов одного торгового инструмента,

то как потребляется трафик программой? Потребляется ли трафик минимального таймфрейма, или трафик всех таймреймов?

 
igrok2008 >>:

Ещё раз здравствуйте!!!!!!!

Хотелось бы /неназойливо/;-)) напомнить о своём вопросе на стр. 64 про торговые условия для МАшки... заранее благодарен (за подзатыльник чайнику)

int start()
  {
//----
    double MA_0=iMA(NULL, 0, pMA, pSh, mode, price,0);
    double MA_1=iMA(NULL, 0, pMA, pSh, mode, price,1);

    перед использованием в коде open_1 или  open_0 их нужно инициализировать, т.е. объяснить программе
    к виду каких данных эти опены относятся(целые,дробные,строчные,логические)

    double open_0=Open[0]; //  double - дробное число. 0 и 1 это номера ячееек,
    double open_1=Open[1]; // которые в данном случае являются номерами баров
        
    if(MA_1< Open[1] && MA_0>Open[0])
     if(CheckOrders(OP_SELL))//продажа
      {
       if(!OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Buy. Ошибка №", GetLastError()); 
       }
       
    if(MA_1>Open[1] && MA_0<Open[0])
     if(CheckOrders(OP_BUY))//покупка
      {
       if(!OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, NULL, MagicNumber))
         Print("Не открыт ордер Sell. Ошибка №", GetLastError()); 
       }
//----
   return(0);
  }
 
KONDOR >>:

Спасибо за ответ!!!

1. Позвольте уточнить, две строчки с double open_0 и double_1 писать нужно ПЕРЕД строками double MA, или это некритично ??????...

2. В торговых условиях можно заменить open[0,1] на open_0,1 ????????.....

 
igrok2008 >>:

Спасибо за ответ!!!

1. Позвольте уточнить, две строчки с double open_0 и double_1 писать нужно ПЕРЕД строками double MA, или это некритично ??????...

2. В торговых условиях можно заменить open[0,1] на open_0,1 ????????.....

1. не критично

2. можно

 

Помогите пожалуйста... может быть я конечно лентяй, но никак не могу понять как подключить программу для торговли на демо или реальный счет... объясните пожалуйста что куда писать, куда петь, очень прошу... заранее спасибо!))

 
написать - написал, в тестере поторговал, а на демо или реале не хочет делать сделки, и вообще  сигналов нет, хотя должны быть(((
 
keekkenen >>:

1. не критично

2. можно

CGFCB<J т. е. СПАСИБО!!!!

Причина обращения: