Решил я стать писателем. Захотел написать что нибудь на иностранном языке MQL4. Почитал кое что о нем, ну сюжет родился простенький написать эксперт чтобы открывал позицию sel когда RSIс периодом 8 пересекает 70 и закрывать позицию когда пересекает уровень 30 и чтобы ничего другого не происходило. Написал, вот код
//---- 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….. Может быть кто нибудь из опытных писателей поймет и скажет почему так и как это исправить.
Хотелось бы /неназойливо/;-)) напомнить о своём вопросе на стр. 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);}
Помогите пожалуйста... может быть я конечно лентяй, но никак не могу понять как подключить программу для торговли на демо или реальный счет... объясните пожалуйста что куда писать, куда петь, очень прошу... заранее спасибо!))
Всем привет
Решил я стать писателем. Захотел написать что нибудь на иностранном языке 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….. Может быть кто нибудь из опытных писателей поймет и скажет почему так и как это исправить.
тогда на демо в журнале более четко прорисовывется все. Понятнее, где искать ошибку. Самому...
спасибо
Ещё раз здравствуйте!!!!!!!
Хотелось бы /неназойливо/;-)) напомнить о своём вопросе на стр. 64 про торговые условия для МАшки... заранее благодарен (за подзатыльник чайнику)
Господа, подскажите, если я использую в терминале несколько разных временных чартов одного торгового инструмента,
то как потребляется трафик программой? Потребляется ли трафик минимального таймфрейма, или трафик всех таймреймов?
Ещё раз здравствуйте!!!!!!!
Хотелось бы /неназойливо/;-)) напомнить о своём вопросе на стр. 64 про торговые условия для МАшки... заранее благодарен (за подзатыльник чайнику)
Спасибо за ответ!!!
1. Позвольте уточнить, две строчки с double open_0 и double_1 писать нужно ПЕРЕД строками double MA, или это некритично ??????...
2. В торговых условиях можно заменить open[0,1] на open_0,1 ????????.....
Спасибо за ответ!!!
1. Позвольте уточнить, две строчки с double open_0 и double_1 писать нужно ПЕРЕД строками double MA, или это некритично ??????...
2. В торговых условиях можно заменить open[0,1] на open_0,1 ????????.....
1. не критично
2. можно
Помогите пожалуйста... может быть я конечно лентяй, но никак не могу понять как подключить программу для торговли на демо или реальный счет... объясните пожалуйста что куда писать, куда петь, очень прошу... заранее спасибо!))
1. не критично
2. можно
CGFCB<J т. е. СПАСИБО!!!!