Вопрос к разработчикам Улучшение документации

 

Здравствуйте !!!

Не могли бы вы улучшить документацию и определить некоторые константы, встроенные переменные и т.д.

в частности

1.работа с датами (datetime)

определите формат по умолчанию. т.е. если передается параметр в переменную определенную как datetime в виде, допустим 20131002

то будет этой переменной присвоено значение 02.10.2013 а не 0 (ноль) или 01.01.1970

2.работа с массивами array[0],

Не где не описано, что размер массива задается только числом, что нельзя подставить переменную, что нужно обнулить массив, доже если он задан числом, вообщем что эта функция сырая, и более менее работает только при написании индикатора, в скриптах и советниках она не пашет в формате array[0],.

в таком случае ее надо перенести в Индикаторы. или описать ограничения.

Нужно описать такие данные как Торговые операции и им подобные

т.к. эти данные встречаються в разных функциях

Пример OP_SELL

В функции OrderSend это значение определенно как int и равно 1

но будет ли оно распознано если будет передан параметр в виде текста с соблюдением регистра

Ну допустим в языках С++ это работает.

т.е. вы даете два варианта представления этих данных один в виде int, а второй не известный и самое главное он работает в примерах, это также имеет отношение ко всем Стандартным константам

Для чего это нужно вот простоу пример двух функций которые могут быть объединены в одну с включением критерия

double FirstCenaBUY() {
   double order_open_price;
   datetime ticket1;
   double IstCena = 0;
   datetime ticket2 = 0;
   for (int pos = OrdersTotal() - 1; pos >= 0; pos--) {
      OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_BUY) {
         ticket1 = OrderOpenTime();
         if (ticket2 > ticket1 || ticket2==0) {
            order_open_price = OrderOpenPrice();
            IstCena = order_open_price;
            ticket2 = ticket1;
         }
      }
   }
   return (order_open_price);
}
double FirstCenaSHELL() {
   double order_open_price;
   datetime ticket1;
   double IstCena = 0;
   datetime ticket2 = 0;
   for (int pos = OrdersTotal() - 1; pos >= 0; pos--) {
      OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL) {
         ticket1 = OrderOpenTime();
         if (ticket2 > ticket1 || ticket2==0) {
            order_open_price = OrderOpenPrice();
            IstCena = order_open_price;
            ticket2 = ticket1;
         }
      }
   }
   return (order_open_price);
}

теперь одна функция

double FirstCena(int cmd) {
   double order_open_price;
   datetime ticket1;
   double IstCena = 0;
   datetime ticket2 = 0;
   for (int pos = OrdersTotal() - 1; pos >= 0; pos--) {
      OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == cmd) {
         ticket1 = OrderOpenTime();
         if (ticket2 > ticket1 || ticket2==0) {
            order_open_price = OrderOpenPrice();
            IstCena = order_open_price;
            ticket2 = ticket1;
         }
      }
   }
   return (order_open_price);
}

и теперь при вызове этой функции могут в переменную cmd вставить текст вместо 0,1,2,3,4,5

я то до этого уже дошел и понял разницу, а вот новичок, с умением писать в java, C++, paskal, ну и прочее будет мучаться

ну я еще думаю, что не все не описанные тонкости этого языка я узнал.

По этому большая просьба, дополните вашу документацию хотя бы разделом отличия от других языков

И еще допустим мне надо в этой функции получить не самую первую цену а допустим время открытия самого раннего ордера

как мне передать параметр

double FirstCena(int cmd,???)

в Строку

order_open_price = OrderOpenPrice();

чтобы было

order_open_price = OrderOpenTime();

Заранее благадарю

 

очень "уважительную" тему вы открыли, СТОЛЬКО АРГУМЕНТОв....

(вот я пришел язык изучать, а что-то мне тут не нравится - поменяйте пожалуйста !!!)


переменная double IstCena кроме загромаждения места что-то еще делает ???

Ответ на вопрос, было бы желание нашли бы в ветке дня новичков где вам в частности и мне место.

дописать одну переменную в описание пользовательской функции и поставить обработку условия или свитч надеюсь сумеете

artmedia70 26.09.2013 13:33 #
zaqwsx123:

Здравствуйте!

Как обычно нужна помощь, не могу разобраться как правильно выбирать отложенные ордера по магическому номеру. Можете кто-нибудь скинуть код, чтоб на примере посмотреть как это делается. Заранее спасибо!)

Выбирает любой заданный ордер, открытый самым последним и возвращает его тикет. Если такого ордера нет, то возвращает -1 :

//-----------------------------------------------------------------------------+
int GetTicketLastOpenOrder(string sy, int op, int mn) {
   int   i, j=-1, t=0, k=OrdersTotal()-1;
   for (i=k; i>=0; i--) {                       // цикл от конца к началу
      if (OrderSelect(i,SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue;// если магик не тот - переходим к следующему
         if (OrderSymbol()!=sy)        continue;// если символ не тот - переходим к следующему
         if (OrderType()!=op)          continue;// если тип не тот - переходим к следующему
         if (t<OrderOpenTime()) {   // выбран нужный, ...
            t=OrderOpenTime();      // ... ищем последний ...
            j=i;                    // ... открытый ордер
            }
         }
      else Print("FUNC GetTicketLastOpenOrder() ошибка выбора ордера "+GetLastError());
      }
   if (OrderSelect(j,SELECT_BY_POS)) return(OrderTicket()); // если найден ордер, вернём его тикет
   return(-1);                                              // иначе - возвращаем -1
}
//-----------------------------------------------------------------------------+
 

Да критика уместная,

я не просил изменить язык, я просил дополнить документацию,

а double IstCena

специально вставлена для тех КТО читает не смысл, а ищет ошибки и их не видет, а она вот

if (ticket2 > ticket1 || ticket2==0???)


и вы я вижу не страдаете оптимизацией. все это я написал потому как люди устали бороться и присоединяют DLL не известного происхождения но со стандартными понятными функциями, или ищут как присоединить Java class.

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

ладно пойду к новичкам, может чего нового узнаю.

 
AT-2000:

Да критика уместная,

я не просил изменить язык, я просил дополнить документацию,

а double IstCena

специально вставлена для тех КТО читает не смысл, а ищет ошибки и их не видет, а она вот


и вы я вижу не страдаете оптимизацией. все это я написал потому как люди устали бороться и присоединяют DLL не известного происхождения но со стандартными понятными функциями, или ищут как присоединить Java class.

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

ладно пойду к новичкам, может чего нового узнаю.

Интересно вы пишете... А искали? В частности о константах:

Константа Значение Описание
OP_BUY 0 Покупка
OP_SELL 1 Продажа
OP_BUYLIMIT 2 Отложенный ордер BUY LIMIT
OP_SELLLIMIT 3 Отложенный ордер SELL LIMIT
OP_BUYSTOP 4 Отложенный ордер BUY STOP
OP_SELLSTOP 5 Отложенный ордер SELL STOP
 

Да о них я и писал

вот видите они имеют два значения одно цифровое в виде int, с этим понятно

Второе не понятно

пример

я пишу алгоритм и вставляю в переменную string torg="OP_BUY";

будет ли работать данная конструкция, для чего это нужно, ну допустим я делаю шаблон для выполнения

который первоначально имеет текстовый формат

string text="Order"+условие+"Close"или"Send"+OP_BUY или OP_SELL ну и так долее если вы понимаете что такое шаблон

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

 
AT-2000:

Да о них я и писал

вот видите они имеют два значения одно цифровое в виде int, с этим понятно

Второе не понятно

пример

я пишу алгоритм и вставляю в переменную string torg="OP_BUY";

будет ли работать данная конструкция, для чего это нужно, ну допустим я делаю шаблон для выполнения

который первоначально имеет текстовый формат

string text="Order"+условие+"Close"или"Send"+OP_BUY или OP_SELL ну и так долее если вы понимаете что такое шаблон

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

Раз есть константа, значит у неё есть значение. Это вам говорит о чём-нибудь? В справочнике есть все константы - их просто нужно видеть. Пробовали читать справку в МЕ? Ставите курсор на команду, нажимаете F1 и читаете. А ещё, в справке есть ссылки, по которым тоже неплохо бы переходить иногда. В частности: для того, чтобы показать вам константы, я перешёл по ссылке в описании OrderSend()

cmd - Торговая операция. Может быть любым из значений торговых операций.


ЗЫ. А зачем вам строковый шаблон??? Вы хотите потом вычленять из него данные? Умом Россию не понять...

 

судя по ответу вы не сильно поняли, о чем идет речь. Я умею пользоваться документацией.

вот строка из учебника

int OrderSend (string symbol, int cmd, double volume, double price, int slippage, double stoploss,
double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

а вот пример функции

//--------------------------------------------------------------------
// simpleopen.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int start()                                  // Спец. функция start()
  {                                          // Открытие BUY
   OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-15*Point,Bid+15*Point);
   return;                                   // Выход из start()
  }
//--------------------------------------------------------------------

что-то OP_BUY не сильно смахивает на int вопрос какой формат int cmd в данном примере явно не int.

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

 
AT-2000:

судя по ответу вы не сильно поняли, о чем идет речь. Я умею пользоваться документацией.

вот строка из учебника

а вот пример функции

что-то OP_BUY не сильно смахивает на int вопрос какой формат int cmd в данном примере явно не int.

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

Судя по вашим высказываниям, вы не очень поняли, что я вас прекрасно понял и дал вам ответ.

Дубль два:

Константа Значение Описание
OP_BUY 0 Покупка
OP_SELL 1 Продажа
OP_BUYLIMIT 2 Отложенный ордер BUY LIMIT
OP_SELLLIMIT 3 Отложенный ордер SELL LIMIT
OP_BUYSTOP 4 Отложенный ордер BUY STOP
OP_SELLSTOP 5 Отложенный ордер SELL STOP


Столбец Значение вам хоть о чём-либо говорит?

Вы знакомы с #define ?

Может так понятнее будет:

#define Op_My_Buy       0
#define Op_My_Sell      1
#define Op_My_BuyLimit  2
#define Op_My_SellLimit 3
#define Op_My_BuyStop   4
#define Op_My_SellStop  5
 
Я понял что надо цифровой
 
AT-2000:

Да о них я и писал

вот видите они имеют два значения одно цифровое в виде int, с этим понятно

Второе не понятно

пример

я пишу алгоритм и вставляю в переменную string torg="OP_BUY";

будет ли работать данная конструкция, для чего это нужно, ну допустим я делаю шаблон для выполнения

который первоначально имеет текстовый формат

string text="Order"+условие+"Close"или"Send"+OP_BUY или OP_SELL ну и так долее если вы понимаете что такое шаблон

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


OP_BUY, OP_SELL - это имена констант. К ним можно относиться также как к именам переменных. Только переменным можно присваивать разные значения в процессе работы программы, а константам нет.

string torg="OP_BUY"; - это неправильно. Вот так можно: int torg = OP_BUY;

 
AT-2000:
Я понял что надо цифровой

Можно просто вместо 0 писать OP_BUY, вместо 1 писать OP_SELL и т.д.

Хотел, чтоб вы сами поняли

А вообще, лучше с такими вопросами сюда