[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 358

 
Chiripaha:

Этот параметр отвечает за цвет стрелки удаления https://docs.mql4.com/ru/trading/OrderDelete - Можно его (параметр) вообще оттуда убрать, тогда стрелка не будет просто отображаться. А если уж стрелка прям так нужна, то лучше перечитать раздел книжки Виды переменных.

К слову, я такой же не особо искушенный в кодировании (некоторые это называют программированием, не различая эти понятия - но это кодирование). И так же залез в справочники и посмотрел что это за штуки такие. Чаще "грызите" справочники и учебники. Как правило, большинство вопросов там описаны. - Так все делают, даже опытные, т.к. не все можно запомнить. Это все справочные материалы.

clDelete - как можно догадаться, cl - color (цвет), Delete - удаление. Цвет удаления.


Спасибо большое за ответ.Я уже удалял переменную  clDelete

void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
  
  if (sy=="") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) 
          {
          OrderDelete(OrderTicket());
          }

Но в этом случае компилятор выдает другую ошибку.

'DeleteOrders' - function returns no result    C:\Program Files\Alpari NZ MT4\experts\ОТЛОЖЕННИК.mq4 (68, 5)

Как ее исправить.


 
solnce600:

Всем добрый день!

Пытаюсь воспользоваться в тестере  функцией по удалению ВСЕХ отложенных ордеров для тестера  из функций Кима

При компиляции выходит ошибка по поводу того,что переменная  clDelete не определена.

'clDelete' - variable not defined    C:\Program Files\Alpari NZ MT4\experts\ОТЛОЖЕННИК.mq4 (94, 38)

Подскажите пожалуйста - как и где ее нужно определить?

Спасибо.

Во-первых, цикл разверните в обратную сторону:

    for (i = k - 1; i <= 0; i--)

а функции OrderDelete() дайте то, что она хочет.

 
TarasBY:

Перебор массива:

- если я правильно понял Ваши "хотелки".

Игорь, спасибо большое!

Как я понял, функции специальной нету - значит, перебором.

 
Chiripaha:

Игорь, спасибо большое!

Как я понял, функции специальной нету - значит, перебором.

Штатной функции нет.
 
solnce600: 'DeleteOrders' - function returns no result    C:\Program Files\Alpari NZ MT4\experts\ОТЛОЖЕННИК.mq4 (68, 5)

Ваша функция (самописная) DeleteOrders() НИЧЕГО не возвращает! Посмотрите в своём коде - как Вы её вызываете.
 

Большое спасибо за оперативный ответ

Цикл развернул.

Выдает теперь другую  ошибку

'DeleteOrders' - function returns no result    (функция не возвращает никакого результата)

А что еще в качестве передаваемого параметра нужно функции OrderDelete(OrderTicket()) кроме OrderTicket() и кроме цвета стрелки(которая мне не нужна)?

void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
  
  if (sy=="") sy=Symbol();
   for (i = k - 1; i <= 0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) 
          {
          OrderDelete(OrderTicket());
 
TarasBY:
Ваша функция (самописная) DeleteOrders() НИЧЕГО не возвращает! Посмотрите в своём коде - как Вы её вызываете.
Т.е. в конце  кода  пользовательской функции должны быть строки возвращающие TRUE или  FALSE ?
 
TarasBY:
Ваша функция (самописная) DeleteOrders() НИЧЕГО не возвращает! Посмотрите в своём коде - как Вы её вызываете.

Вставил в конце кода функции строки возвращающие значение  true

Изменил вызов функции

R = DeleteOrders(true);
if(R ==true )

 Ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,iHigh( Symbol (), 0,1)-1500*Point,1,iHigh( Symbol (), 0,1),iHigh( Symbol (), 0,1)-1610*Point,"jfh",123 );//ЕНА   
 //Ticket=OrderSend(Symbol(),OP_SELLSTOP,0.1,iHigh( Symbol (), 0,1)-1000*Point,1,iHigh( Symbol (), 0,1)+330*Point,iHigh( Symbol (), 0,1)-1100*Point,"jfh",123 );//ЕНА
  if (Ticket>0)
   X=iHigh( Symbol (), 0,1);
     if (OrderSelect (ot-1,SELECT_BY_POS))                                                       
  if ( OrderType ()==OP_SELLSTOP)
         DT = OrderOpenTime ();
  
}
}
                   
 return(0);
                           
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="") sy=Symbol();
   for (i = k - 1; i <= 0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn)
          {
          int W = OrderDelete(OrderTicket());
          if (W==true)
          return(true);

Возвращает ту же ошибку.

'DeleteOrders' - function returns no result    (функция не возвращает никакого результата)

Подскажите пожалуйста - в чем моя ошибка.

Спасибо.

 
solnce600:

Вставил в конце кода функции строки возвращающие значение  true

Изменил вызов функции

R = DeleteOrders(true);
if(R ==true )

Про тип функции забыли:

void bool DeleteOrders (string sy="", int op=-1, int mn=-1)
 
TarasBY:

Про тип функции забыли:

Все ОК!!!Большое спасибо!!!