Спасибо за помощь, я удалил цикл while и перехожу к функции start при каждом выполнении ордера, удалил функцию IsTesting (пока что) и мой OrderSend, похоже, работает.
Запустил, теперь не важно где у меня функция Print() ничего не появляется в журнале (или в журнале) начальный ордер открывается нормально, а потом ничего - даже если у меня ордер на печать будет следующей строкой в коде?
спасибо за помощь, я удалил цикл while и прерывание к функции start при каждом выполнении ордера, удалил функцию IsTesting (пока) и мой OrderSend, похоже, работает.
Запуская его сейчас, независимо от того, где у меня есть функция Print(), ничего не появляется в журнале (или в журнале регистрации), первоначальный ордер открывается нормально, а затем ничего - даже если у меня есть мой ордер печати в качестве следующей строки в коде?
Если функция возвращает значение int, например OrderSend(), мы можем использовать код, подобный этому, чтобы проверить, что функция сработала, и сообщить об ошибке в журналы, если она не сработала. ...
. Посмотрите ссылку, которую дал WHRoeder, и вы найдете то, что я спрятал здесь со звездами .......
Используйте ее также для проверки закрытия сделок
Сделайте что-то подобное внутри вашего code...., таким образом, когда ordersend не срабатывает, вы будете знать, что это за ошибка и откуда она исходит.
.
что происходит при неудачном закрытии ордера.......?????
Я закодировал ошибки печати, но в журнал ничего не печатается, поэтому я не могу понять, какие ошибки происходят? Может быть, я все еще упускаю что-то очевидное? Теперь я снова открываю продажу, а потом не могу закрыть...
//+------------------------------------------------------------------+//| SMA scripy.mq4 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"externint z=1234;
int total;
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int init()
{
//---- int i;
total=0;
if (OrdersTotal()!=0)
{
for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS))
{
if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
{
if ((OrderType()==OP_BUY)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)<iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
}
if ((OrderType()==OP_SELL)&&(iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0)>iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0)))
{
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
}
else
{
total++;
}
}
}
}
}
//----return;
}
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int start()
{
//----int ticket,i,L;
bool x;
if (AccountBalance()>50)
{
//-----double SMA6=iMA(Symbol(),0,6,-3,MODE_SMA,PRICE_CLOSE,0);
Print("SMA6 is ",SMA6);
double SMA21=iMA(Symbol(),0,21,0,MODE_SMA,PRICE_CLOSE,0);
Print("SMA21 is ",SMA21);
double RSI70=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)<70;
Print("RSI70 is ",RSI70);
double RSI30=iRSI(Symbol(),PERIOD_D1,14,PRICE_CLOSE,0)>30;
Print("RSI30 is ",RSI30);
//----if (total==0)
{
if ((RSI70)&&(SMA6>SMA21))
{
ticket=OrderSend(Symbol(),OP_BUY,v(AccountBalance()),Ask,0,0,0,"",z,0,Red);
total+=1;
if (ticket<0)
{
Print("OrderSend Failed", GetLastError());
}
}
if ((RSI30)&&(SMA6<SMA21))
{
ticket=OrderSend(Symbol(),OP_SELL,v(AccountBalance()),Bid,0,0,0,"",z,0,Blue);
total+=1;
if (ticket<0)
{
Print("OrderSend Failed", GetLastError());
}
}
}
//---if (total!=0)
{
L=0;
for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS))
{
if ((OrderSymbol()==Symbol())&&(OrderMagicNumber()==z))
{
if ((OrderType()==OP_BUY)&&(SMA6<SMA21))
{
x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
if (x==false)
{
Print("Error is ", GetLastError());
}
else total+=-1;
break;
}
if ((OrderType()==OP_SELL)&&(SMA6>SMA21))
{
x=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Green);
if (x==false)
{
Print("Error is ", GetLastError());
}
else
{
total+=-1;
}
break;
}
else
{
L++;
}
}
total=L;
}
}
}
//----
}
//----return;
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//-------------------------------------------------------------------+double v(double k)
{
double v=((k*0.015)/1000);
if (v<MarketInfo(Symbol(),MODE_MINLOT))
{
v=MarketInfo(Symbol(),MODE_MINLOT);
return(v);
}
else
{
return(v);
}
}
//-------------------------------------------------------------------+
duuuhhhh iRSI двойной, но сравнение выводит 1 - поэтому я заменил RSI30 и RSI70 на просто RSI и сделал сравнение и все работает УРА! ИСКЛЮЧЕНИЕ, когда я меняю SMA6 на сдвиг, он выводит SMA6=0 всегда? почему?
Спасибо всем за помощь! Надеюсь в следующий раз не буду так сильно раздражать!
Я закодировал ошибки печати, но ничего не печатается в журнал, поэтому я не могу понять, какие ошибки происходят? Я все еще упускаю что-то очевидное? Теперь я снова открываю продажу, а потом не могу закрыть...
не смотрите только в журнал терминала ... посмотрите также в терминале экспертов .....
что вы там увидите
Теперь печатается и выполняется :) спасибо за помощь - я ошибся, определив iRSI<70 как двойное значение (так как это было сравнение), что вызвало проблемы. Теперь он печатает и работает как ожидалось, за исключением того, что если я изменю сдвиг SMA, он печатает SMA=0?
Печатается и выполняется сейчас :) спасибо за помощь - я неправильно определил iRSI<70 как двойное значение (так как это было сравнение) и это вызывало проблемы. Теперь он печатает и работает как ожидалось, за исключением того, что если я изменю сдвиг SMA, он печатает SMA=0?
Поместите SMA с теми же настройками на график вашего советника и посмотрите, что у вас получилось...
Спасибо за помощь, я удалил цикл while и перехожу к функции start при каждом выполнении ордера, удалил функцию IsTesting (пока что) и мой OrderSend, похоже, работает.
Запустил, теперь не важно где у меня функция Print() ничего не появляется в журнале (или в журнале) начальный ордер открывается нормально, а потом ничего - даже если у меня ордер на печать будет следующей строкой в коде?
спасибо за помощь, я удалил цикл while и прерывание к функции start при каждом выполнении ордера, удалил функцию IsTesting (пока) и мой OrderSend, похоже, работает.
Запуская его сейчас, независимо от того, где у меня есть функция Print(), ничего не появляется в журнале (или в журнале регистрации), первоначальный ордер открывается нормально, а затем ничего - даже если у меня есть мой ордер печати в качестве следующей строки в коде?
как теперь выглядит ваш код?
double, int, string, bool, datetime, color, ........ что я должен использовать ???....
Являются ли они двойными ???
SEEEEEE Что такое возвращаемые значения функций ? Как их использовать? - MQL4 форум
большое объяснение
Если функция возвращает значение int, например OrderSend(), мы можем использовать код, подобный этому, чтобы проверить, что функция сработала, и сообщить об ошибке в журналы, если она не сработала. ...
. Посмотрите ссылку, которую дал WHRoeder, и вы найдете то, что я спрятал здесь со звездами .......
Используйте ее также для проверки закрытия сделок
Сделайте что-то подобное внутри вашего code...., таким образом, когда ordersend не срабатывает, вы будете знать, что это за ошибка и откуда она исходит.
.
что происходит при неудачном закрытии ордера.......?????
И RSI, и MA являются двойными, поэтому переменные тоже должны быть двойными, не так ли?
https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA
Я закодировал ошибки печати, но в журнал ничего не печатается, поэтому я не могу понять, какие ошибки происходят? Может быть, я все еще упускаю что-то очевидное? Теперь я снова открываю продажу, а потом не могу закрыть...
duuuhhhh iRSI двойной, но сравнение выводит 1 - поэтому я заменил RSI30 и RSI70 на просто RSI и сделал сравнение и все работает УРА! ИСКЛЮЧЕНИЕ, когда я меняю SMA6 на сдвиг, он выводит SMA6=0 всегда? почему?
Спасибо всем за помощь! Надеюсь в следующий раз не буду так сильно раздражать!
И RSI, и MA являются двойными, поэтому переменные тоже должны быть двойными, не так ли?
https://docs.mql4.com/indicators/iRSI && https://docs.mql4.com/indicators/iMA
Я закодировал ошибки печати, но ничего не печатается в журнал, поэтому я не могу понять, какие ошибки происходят? Я все еще упускаю что-то очевидное? Теперь я снова открываю продажу, а потом не могу закрыть...
поместите советника на график демо-счета
не ищите только в журнале терминала ...
загляните также в журнал "Эксперты терминалов" .....
что вы видите там напечатанным
поместите советника на график демо-счета
не смотрите только в журнал терминала ...
посмотрите также в терминале экспертов .....
что вы там увидите
Теперь печатается и выполняется :) спасибо за помощь - я ошибся, определив iRSI<70 как двойное значение (так как это было сравнение), что вызвало проблемы. Теперь он печатает и работает как ожидалось, за исключением того, что если я изменю сдвиг SMA, он печатает SMA=0?
Печатается и выполняется сейчас :) спасибо за помощь - я неправильно определил iRSI<70 как двойное значение (так как это было сравнение) и это вызывало проблемы. Теперь он печатает и работает как ожидалось, за исключением того, что если я изменю сдвиг SMA, он печатает SMA=0?
Поместите SMA с теми же настройками на график вашего советника и посмотрите, что у вас получилось...
Почему общий итог += 1;
В данный момент я не знаю, удался ли ordersend.
и если он не работает, я не вижу, какой тип ордера он пытался открыть, это может быть также сделка на продажу, которую вы пытались открыть.