Ответ
 
Опции темы
02.07.2014, 06:55
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,598 раз(а) / Репутация: 2595
Подскажите как избавиться от
return value of 'OrderSend' should be checked
return value of 'OrderModify' should be checked
return value of 'OrderClose' should be checked
в блоке открытия ордера

Цитата:
if (MoneyManagement == true) firstlot = GetFirstLot();
else firstlot = Lots;
OrderSend (Symbol(), OP_BUYSTOP, firstlot, Ask+delta*Point, Slippage, 0, 0, "Innos Buy", Magic, exp, Blue);
ticket = GetLastOrderTicket (OP_BUYSTOP);
if (ticket>0)
{
GridBuySL = NormalizeDouble (OrderOpenPrice()-StopLoss*Point, Digits);
if (GridBuySL < OrderOpenPrice())
{
OrderModify (ticket, OrderOpenPrice(), GridBuySL, 0, exp);
Errors = 0;
lastbuylot = OrderLots();
}
else
{
OrderClose (ticket, OrderLots(), OrderOpenPrice(), Slippage);
Errors++;
}
}

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Ты не старайся, и у тебя всё получится.
ksardas вне форума Ответить с цитированиемОтветить с цитированием  
02.07.2014, 06:57
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,017
Поблагодарили 855 раз(а) / Репутация: 841
int number = OrderSend(...
Результат ордерсенд - целое число, номер ордера или -1 при ошибке
ansol на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ksardas (02.07.2014)
02.07.2014, 07:02
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,598 раз(а) / Репутация: 2595
Сообщение от ansol Посмотреть сообщение
int number = OrderSend(...
Результат ордерсенд - целое число, номер ордера или -1 при ошибке
Как-то так?
PHP код:
if (MoneyManagement == truefirstlot GetFirstLot();
         else 
firstlot Lots;
         
int number =OrderSend (Symbol(), OP_BUYSTOPfirstlotAsk+delta*PointSlippage00"Innos Buy"MagicexpBlue);
         
ticket GetLastOrderTicket (OP_BUYSTOP);
           if (
ticket>0)
         {
            
GridBuySL NormalizeDouble (OrderOpenPrice()-StopLoss*PointDigits);
            if (
GridBuySL OrderOpenPrice()) 
            {
               
int namber =OrderModify (ticketOrderOpenPrice(), GridBuySL0exp);
               
Errors 0;
               
lastbuylot OrderLots();
            }
            else 
            { 
               
int nomber =OrderClose (ticketOrderLots(), OrderOpenPrice(), Slippage);
               
Errors++;
            }
         } 

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Ты не старайся, и у тебя всё получится.
ksardas вне форума Ответить с цитированиемОтветить с цитированием  
02.07.2014, 07:05
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,017
Поблагодарили 855 раз(а) / Репутация: 841
Ну, типа, да. Компилируй, увидишь, что таких ошибок не стало
Только
PHP код:
         int number =OrderSend (Symbol(), OP_BUYSTOPfirstlotAsk+delta*PointSlippage00"Innos Buy"MagicexpBlue); 
         
ticket GetLastOrderTicket (OP_BUYSTOP); 
У тебя ticket и number должны быть равны, по идее или это чтоб уж совсем-совсем точно было?
ansol на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ksardas (02.07.2014)
02.07.2014, 07:33
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,598 раз(а) / Репутация: 2595
Спасибо, понятно))
а если вместо
PHP код:
int namber =OrderModify (ticketOrderOpenPrice(), GridBuySL0exp); 
сделать так
PHP код:
if(!OrderModify (ticketOrderOpenPrice(), GridBuySL0exp)break; 
правильней будут??
в обоих случаях ошибки проверки нет

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Ты не старайся, и у тебя всё получится.
ksardas вне форума Ответить с цитированиемОтветить с цитированием  
02.07.2014, 07:36
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,017
Поблагодарили 855 раз(а) / Репутация: 841
Это ж целое число, а не булева переменная, надо if(OrderSend(...) > -1)
потому как !OrderSend будет только в случае нуля, а -1 сработает также как и +1
ansol на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ksardas (02.07.2014)
02.07.2014, 07:51
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,598 раз(а) / Репутация: 2595

Да-да, я так и подумал

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Ты не старайся, и у тебя всё получится.
ksardas вне форума Ответить с цитированиемОтветить с цитированием  
02.07.2014, 08:50
Аватар для gince
gince Местный знаток
Регистрация: 09.09.2008 / Адрес: Литва / Сообщений: 427
Поблагодарили 783 раз(а) / Репутация: 783
  • Отправить сообщение для gince с помощью Skype™
Привет всем.
Если надо чтоб индикатор работал с 9.00 до 20.00 я вставил в начале старта услувие
PHP код:
if(Hour() < 9   || Hour() > 20)return(0); 
,
но он все равно рисует за все сутки.
Где моя ошибка ?

PHP код:
int OnCalculate(const int rates_total,
                const 
int prev_calculated,
                const 
datetime &time[],
                const 
double &open[],
                const 
double &high[],
                const 
double &low[],
                const 
double &close[],
                const 
long &tick_volume[],
                const 
long &volume[],
                const 
int &spread[])
  {
//---
      
if(Hour() < 9   || Hour() > 20)return(0); 
      
      
int Counted_bars;                       // Количество просчитанных баров 
      
Counted_bars=IndicatorCounted(); // Количество просчитанных баров    
      
int i=Bars-Counted_bars-1;           // Индекс первого непосчитанного   
      
if (i>History-1)                 // Если много баров то ..      
      
i=History-1;                     // ..рассчитывать заданное колич.
      
while(i>=0)                      // Цикл по непосчит
     
....................................................
..............................................................
      
i--;      
      }
//--- return value of prev_calculated for next call
   
return(rates_total); 

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Гинтарас
gince на форуме Ответить с цитированиемОтветить с цитированием  
02.07.2014, 08:53
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,017
Поблагодарили 855 раз(а) / Репутация: 841
Цитата:
Если надо чтоб индикатор работал с 9.00 до 20.00 я вставил в начале старта услувие
Надо не возвращать ноль, а в буфер индикатора в это время запихивать ноль, а так он у вас просто не считает с 20 до 9, зато в остальное время (с 9 до 20) всё пересчитывает полностью.
ansol на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gince (02.07.2014)
02.07.2014, 09:10
Аватар для gince
gince Местный знаток
Регистрация: 09.09.2008 / Адрес: Литва / Сообщений: 427
Поблагодарили 783 раз(а) / Репутация: 783
  • Отправить сообщение для gince с помощью Skype™
Понял, но несделал.
PHP код:
int OnCalculate(const int rates_total,
                const 
int prev_calculated,
                const 
datetime &time[],
                const 
double &open[],
                const 
double &high[],
                const 
double &low[],
                const 
double &close[],
                const 
long &tick_volume[],
                const 
long &volume[],
                const 
int &spread[])
  {
//---
     
      
      
int Counted_bars;                       // Количество просчитанных баров 
      
Counted_bars=IndicatorCounted(); // Количество просчитанных баров    
      
int i=Bars-Counted_bars-1;           // Индекс первого непосчитанного   
      
if (i>History-1)                 // Если много баров то ..      
      
i=History-1;                     // ..рассчитывать заданное колич.
      
while(i>=0)                      // Цикл по непосчитанным барам     
      
{    
         
double MA_l_0 iMA(NULL,0,perMA_1,0,modeMA_1,PRICE_CLOSE,i);
         
double MA_l_1 iMA(NULL,0,perMA_1,0,modeMA_1,PRICE_CLOSE,i+1);
         
         
double MA_g_0 iMA(NULL,0,perMA_2,0,modeMA_2,PRICE_CLOSE,i);
         
double MA_g_1 iMA(NULL,0,perMA_2,0,modeMA_2,PRICE_CLOSE,i+1);
         
         
double STD_0 iStdDev(NULL,0,perSTD,0,modeSTD,PRICE_CLOSE,i);
         
double STD_1 iStdDev(NULL,0,perSTD,0,modeSTD,PRICE_CLOSE,i+1);
         
         
//double ELR_1=((High[i]+Low[i])/2)-iMA(NULL,0,perELR,0,1,PRICE_CLOSE,i);  
         //double ELR_2=((High[i]+Low[i])/2)-iMA(NULL,0,perELR,0,1,PRICE_CLOSE,i+1);
         
         //Buy
         
if(MA_l_0 MA_l_1 && 
            
MA_g_0 MA_g_1 && 
            
STD_0 STD_1)
            
            if(
Hour() < 9   || Hour() > 20UPBuffer[i] = 0;
            else 
UPBuffer[i] = Low[i];
        else
         
//Sell   
         
if(MA_l_0 MA_l_1 && 
            
MA_g_0 MA_g_1 && 
            
STD_0 STD_1 )
            
            if(
Hour() < 9   || Hour() > 20DNBuffer[i] = 0;
            else 
DNBuffer[i] = High[i];   
      
i--;
      
      }
//--- return value of prev_calculated for next call
   
return(rates_total);
  } 

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Гинтарас

Последний раз редактировалось gince; 02.07.2014 в 09:17.
gince на форуме Ответить с цитированиемОтветить с цитированием  
08.07.2014, 12:08
Аватар для QCKPPS
QCKPPS Прохожий
Регистрация: 25.10.2013 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1
Could someone post an example of a working solution for MT4 named pipes? Communicated between two terminals. Or any other solution how to make two MT4 terminals communicated with each other?
QCKPPS вне форума Ответить с цитированиемОтветить с цитированием  
08.07.2014, 14:18
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,017
Поблагодарили 855 раз(а) / Репутация: 841
Сообщение от QCKPPS Посмотреть сообщение
Could someone post an example of a working solution for MT4 named pipes? Communicated between two terminals. Or any other solution how to make two MT4 terminals communicated with each other?
Например, здесь:
Миниатюры:
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 19
Размер:	73.5 Кб
ID:	171020  
ansol на форуме Ответить с цитированиемОтветить с цитированием  
08.07.2014, 20:48
Аватар для platonov3000
platonov3000 Интересующийся
Регистрация: 19.11.2010 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
Ребята! Может кто с этим явлением сталкивался? Месяц бьюсь...

В советнике не работает вызванный индикатор, в частности не работают периоды у функции iCustom!
пример:


double Volna = iCustom(NULL,PERIOD_M5,"Awesome",0,0);

у этого индикатора нет входных параметров, но есть 3 буфера. С данным периодом, тестер не видит индикатор, при тестировании на ТФ М1. Работает только "0 или PERIOD_CURRENT" (текущий период). !!!!!!! Это происходит с любым вызванным индикатором, история тестируемого участка на всех ТФ есть.Проверяю так... (по быстрому). Включаю старт тестирования с периодом М1, потом стоп, если тестер не видит индикатор, то тот не отображается на графике. Если меняю период на простой "0" в советнике, то индикатор прекрасно отображается на графике после тестирования.
Программирование только начинаю изучать, но хоть убей, не могу понять поведение данной функции, она и работает и не работает....
Может хоть у кого нибудь зацепка есть, узнать причину?

Последний раз редактировалось platonov3000; 08.07.2014 в 20:52.
platonov3000 вне форума Ответить с цитированиемОтветить с цитированием  
09.07.2014, 07:00
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от platonov3000 Посмотреть сообщение
Проверяю так... (по быстрому). Включаю старт тестирования с периодом М1, потом стоп, если тестер не видит индикатор, то тот не отображается на графике. Если меняю период на простой "0" в советнике, то индикатор прекрасно отображается на графике после тестирования.
Вы чего-то странного желаете - увидеть индикатор с периодом М5 на графике М1. Не будет он отображаться, и не должен, но это совершенно не мешает использовать в коде его значения.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
abuuuuuu (09.07.2014), ksardas (09.07.2014)
09.07.2014, 14:32
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,598 раз(а) / Репутация: 2595
Нужна помощь!!!!
не понимаю, что возвращать внутри void
PHP код:
void TrailingByMA(int iTicket=0,int iMATmFrme=-1)
{
   
// проверяем переданные значения
   
if ((iTicket==0) || (!OrderSelect(iTicket,SELECT_BY_TICKET)) || (iMATmFrme==-1) )
   {
      
Alert("Трейлинг функцией TrailingByMA() невозможен из-за некорректности значений переданных ей аргументов.");
    
// если условия не походят нужно выйти 
      
return(0);
...
далее сам тралл
   

return(0) не правильно, что-же ставить на возврат????

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Ты не старайся, и у тебя всё получится.
ksardas вне форума Ответить с цитированиемОтветить с цитированием  
09.07.2014, 14:58
Регистрация: 13.03.2009 / Сообщений: 2,324
Поблагодарили 1,945 раз(а) / Репутация: 2018
Сообщение от ksardas Посмотреть сообщение
Нужна помощь!!!!
не понимаю, что возвращать внутри void
PHP код:
void TrailingByMA(int iTicket=0,int iMATmFrme=-1)
{
   
// проверяем переданные значения
   
if ((iTicket==0) || (!OrderSelect(iTicket,SELECT_BY_TICKET)) || (iMATmFrme==-1) )
   {
      
Alert("Трейлинг функцией TrailingByMA() невозможен из-за некорректности значений переданных ей аргументов.");
    
// если условия не походят нужно выйти 
      
return(0);
...
далее сам тралл
   

return(0) не правильно, что-же ставить на возврат????
void функция ничего не возвращает.
Можно убрать return(0); в конце функции. А если нужно выйти из функции return;

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Глубокое понимание процессов помогает в работе, но сильно мешает в отдыхе.
http://forexsystems.ru/signaturepics/sigpic3798_1.gif
Чужие программы не переделываю!
Ugar на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ksardas (09.07.2014)
09.07.2014, 15:08
Регистрация: 20.10.2013 / Адрес: Лас-Пальмас-де-Гран-Канария / Сообщений: 701
Поблагодарили 2,598 раз(а) / Репутация: 2595
Сообщение от Ugar Посмотреть сообщение
void функция ничего не возвращает.
Можно убрать return(0); в конце функции. А если нужно выйти из функции return;
Помню что void функция ничего не возвращает, просто поставить return(без аргументов) для выхода затупил, в других местах наоборот добавлял аргументы(0) . Благодарю за помощь!!!

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Ты не старайся, и у тебя всё получится.
ksardas вне форума Ответить с цитированиемОтветить с цитированием  
09.07.2014, 20:30
Аватар для platonov3000
platonov3000 Интересующийся
Регистрация: 19.11.2010 / Сообщений: 2
Поблагодарили 0 раз(а) / Репутация: 1
Сообщение от qqmber Посмотреть сообщение
Вы чего-то странного желаете - увидеть индикатор с периодом М5 на графике М1. Не будет он отображаться, и не должен, но это совершенно не мешает использовать в коде его значения.
Спасибо друг, поправил меня! Я этого не знал.
platonov3000 вне форума Ответить с цитированиемОтветить с цитированием  
11.07.2014, 09:14
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,017
Поблагодарили 855 раз(а) / Репутация: 841
Каким образом в тестере может возникнуть ошибка 138 при
PHP код:
fClose OrderClose(OrderTicket(), OrderLots(), dPriceiPipsclrNONE); 
где iPips = 10 на 5знаке(ноль тоже пробовал) и dPrice = Ask при типе ордера BUY и Bid при SELL
Начал переделывать свой же советник и содрал эту функцию с него, а оно мне фигу такую в логах пишет:
Код:
2014.07.11 14:10:59.238	2014.06.13 06:21  ZZScalp EURUSD,M5: OrderClose error 138
2014.07.11 14:10:59.238	2014.06.13 06:21  ZZScalp EURUSD,M5: error(138): requote #1 ZigZag-27
При этом старая версия работает прекрасно здесь же
ansol на форуме Ответить с цитированиемОтветить с цитированием  
11.07.2014, 10:05
Аватар для qqmber
qqmber Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от ansol Посмотреть сообщение
dPrice = Ask при типе ордера BUY и Bid при SELL
Для начала неплохо было бы закрывать BUY по Bid, SELL по Ask.
qqmber вне форума Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 05:27. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO