Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 148

 

Здравствуйте.
Функция OrderSelect возвращает ошибку 0 (ERR_NO_ERROR - Торговая операция прошла успешно)???
Как избежать этой ошибки?
Код программы и записи из журнала прилагаю.
С уважением. Shurkin.

//+------------------------------------------------------------------+
//|                                                    PoligonTd.mq4 |
//|                                           17 сентября 2013 года. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "17 сентября 2013 года."
#property link      ""

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----Функция OrderSelect--------------------------------------------+
string Str="#20552937 buy 1.00 GBPUSD at 1.55450";//Строка
int Tct=StrToDouble(StringSubstr(Str,1,9));//Номер ордера
   if(OrderSelect(Tct,SELECT_BY_TICKET)==true)//Выбор ордера по номеру
string OdSmb=OrderSymbol();//Символ ордера
   else Print("OrderSelect() вернул ошибку - ",GetLastError());
Print("Кс:"," Str=",Str,"; Tct ",Tct,"; OdSmb ",OdSmb,"?");//Кс
//----
   return(0);
  }
//+------------------------------------------------------------------+

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: removed
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: uninit reason 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: Кс: Str=#20552937 buy 1.00 GBPUSD at 1.55450; Tct 20552937; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: OrderSelect() вернул ошибку - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: loaded successfully

 
Shurkin:

Здравствуйте.
Функция OrderSelect возвращает ошибку 0 (ERR_NO_ERROR - Торговая операция прошла успешно)???
Как избежать этой ошибки?
Код программы и записи из журнала прилагаю.
С уважением. Shurkin.

2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: removed
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: uninit reason 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: Кс: Str=#20552937 buy 1.00 GBPUSD at 1.55450; Tct 20552937; OdSmb ?
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: OrderSelect() вернул ошибку - 0
2013.09.17 13:07:04 PoligonTd GBPUSD,Daily: loaded successfully

Собственно ошибки выбора нет, просто ордера с таким тикетом не существует.
 
Sepulca:
Собственно ошибки выбора нет, просто ордера с таким тикетом не существует.

Ну... если ордера с таким тикетом не существует, то OrderSelect() вернёт false

Вот, судя по всему ошибка есть, раз на else переходим. Вопрос в другом: почему ноль?

 

Никак не пойму как, с наименьшими затратами, реализовать логику.

if(...) установить стоповый ордер;

if(время жизни ордера>время) снять ордер и if(..) установить новый ордер;

Сложность в том, что может быть несколько уже открытых позиций и как их все сопроводить? Как легче всего?

Спасибо!

 

Думаю отказаться от специальной функции init(). По-моему это есть верное решение, ведь так?

Способ вижу такой:

1. Объявляем переменную на глобальном уровне, например, так:

gInitTrue = false;

 Дальше создаём свой ИНИТ:

bool myInit()
{
  // Инициализируем..
  // неоходимые..
  // нам..
  // переменные..
  return(true);
}

В самом начале старта так: 

if (gInitTrue == false)
    myInit();
Интересно услышать мнение более опытных о набоности данного подхода, а так же о правильности предложенного мной вариант решения данной задачи.
 
Sepulca:

Буферов побольше.

Спс, ошибку понял. Еще необходимо было 2 цвета добавить, для 2 буферов.
 
hoz:

Думаю отказаться от специальной функции init(). По-моему это есть верное решение, ведь так?

Способ вижу такой:

1. Объявляем переменную на глобальном уровне, например, так:

Дальше создаём свой ИНИТ:

В самом начале старта так:

Интересно услышать мнение более опытных о набоности данного подхода, а так же о правильности предложенного мной вариант решения данной задачи.

Какова новизна ощущений от нового решения? :-))

Один хрен. Ниразу не понадобилось так делать.

 
artmedia70:

Ну... если ордера с таким тикетом не существует, то OrderSelect() вернёт false

Вот, судя по всему ошибка есть, раз на else переходим. Вопрос в другом: почему ноль?



Проверял - если номер тикета подходит - все норм работает,

если же нет - функция возвращает False, но OrderSelect() молчит как ни в чем не бывало, НОЛИК и все.

 
Zhunko:

Какова новизна ощущений от нового решения? :-))

Один хрен. Ниразу не понадобилось так делать.



 А если ближе к теме? Уже сколько обсуждалось что ИНИТ может подвести при, например, дисконектах или ещё какие-то подобных ситуациях. Т.к. он сам не переинициирует данные потом, в случает непредвиденных ситуаций, и запускается только один раз! А значит, это не совсем верный вариант.
 

Вопрос туповат, но ответ как бы нигде не видал, а может просто криво искал:

В фунциях, а возможно где то еще можно, встретил после типа данных символ & и, если не ошибаюсь, когда-то && видал

func(int& mm_mode, string symbol, int magic,bool& stop) {

Для чего оно? что даєт и делает? Ссылочку если можно откуда подетальнее узнать)))

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