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

 
rigonich:

 1. напишите плиз, кусочек с запросом тикета последней сделики из истории..  --ваш вопрос.

2.Чтобы найти предпоследний,надо запомнить тикет последнего(напимер, в переменной, допустим А) , еще раз запустить цикл, и "пропуcтить" этот ордер.То есть, например, изменить строчку

if(OrderSymbol()==Symbol()) на if(OrderSymbol()==Symbol()&&OrderTicket()!=A), или добавить строчку if(Ticket()!=A)continue;


наводящий вопрос:

а зачем в строке   for(int i=0;i<OrdersHistoryTotal();i++)  нам нужен именно OrdersHistoryTotal() когда мне допустим нужны только 2 сделки? 

может тогда  так 

or(int i=0;i<2;i++)  ??  (проверил - тикет =-1....) нда.....туман...:)))

 
lottamer:


наводящий вопрос:

а зачем в строке   for(int i=0;i<OrdersHistoryTotal();i++)  нам нужен именно OrdersHistoryTotal() когда мне допустим нужны только 2 сделки? 

может тогда  так 

or(int i=0;i<2;i++)  ??  (проверил - тикет =-1....) нда.....туман...:)))


Я дописал предыдущий комментарий, смотрите. К тому же я написал вам код, ищущий последнюю закрытую сделку по текущему инструменту.
 
Товарищи, подскажите, а если я решил написать робота к примеру на С/С++. Написать то не проблема но вот как мне установить связи с metatrader ? Как получит котировки и как отправить обратно сигнал на покупку/продажу?
 
Desead:
Товарищи, подскажите, а если я решил написать робота к примеру на С/С++. Написать то не проблема но вот как мне установить связи с metatrader ? Как получит котировки и как отправить обратно сигнал на покупку/продажу?

Я вообще то других языков не знаю, но наверное можно оформить ваш код как DLL и тогда его можно будет вызвать из MQL программ.
 
rigonich:

Я дописал предыдущий комментарий, смотрите.


да, я понял теперь зачем в цикле сравнение на время, и время вообще....

я так же понимаю ЛОГИКУ - пометить "А", потом "А" исключить, но во-первых, все варианты КУДА это "А" можно приткнуть я испробовал - и все равно советник возвращает мне последний тикет, а не предпоследний.

вписал  2 цикла (2 польз.функц) - первый ваш исходный, второй с исключением "А"... запускаются один за другим.

Принтует ноль.... 

----------------------------------------------------------------------------------------------------

if ( Hour()>=10 && Hour()<20)

  {

    

   LastClosetPoz();Sec_LastClosetPoz();

 

  Print ( ticket2,ticket);

         }

   return(0);

  }

  //--------------------------------------------+

  int LastClosetPoz()

   {

   int Tot=OrdersHistoryTotal(),Ticket=-1; datetime time=0; 

   if(Tot>0)

      {

      for(int i=0;i<OrdersHistoryTotal();i++)

         {

         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

            {

            if(OrderSymbol()==Symbol())

               {

               if(OrderCloseTime()>time)

                  {

                  time=OrderCloseTime();Ticket=OrderTicket(); A=Ticket;

               } 

            }

         }

         else continue;

      }

   }

   return(Ticket);

}


//--------------------------------------------

int Sec_LastClosetPoz()

   {

   int Tott=OrdersHistoryTotal(),Ticket2=-1; datetime time2=0; 

   if(Tott>0)

      {

      for(int i=0;i<OrdersHistoryTotal();i++)

         {

         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)

            {

            if(OrderSymbol()==Symbol()&&OrderTicket()!=A)

               {

               if(OrderCloseTime()>time2)

                  {

                  time2=OrderCloseTime();Ticket2=OrderTicket(); 

               } 

            }

         }

         else continue;

      }

   }

   return(Ticket2);

 
Desead:
Товарищи, подскажите, а если я решил написать робота к примеру на С/С++. Написать то не проблема но вот как мне установить связи с metatrader ? Как получит котировки и как отправить обратно сигнал на покупку/продажу?

DLL - смотрите примеры. Неужели программист, умеющий писать на С\С++, не в состоянии разобраться со стандартными примерами из поставки МТ и это при наличии кучи материалов на форуме ?
 
VladislavVG:

DLL - смотрите примеры. Неужели программист, умеющий писать на С\С++, не в состоянии разобраться со стандартными примерами из поставки МТ и это при наличии кучи материалов на форуме ?

Я не программер, но иногда простейшие вещи пишу себе сам. Написать не сложного робота можно на любом языке и это вообще не проблема. И хотелось не часть функций оформить в виде длл и вызывать их потом из мкл а именно целиком со своим интерфейсом написать робота без вызова метатрейдера. Благо щас полно понапридумывали различных visual  языков где это можно сделать без особого напряга
 
lottamer:


да, я понял теперь зачем в цикле сравнение на время, и время вообще....

я так же понимаю ЛОГИКУ - пометить "А", потом "А" исключить, но во-первых, все варианты КУДА это "А" можно приткнуть я испробовал - и все равно советник возвращает мне последний тикет, а не предпоследний.

вписал  2 цикла (2 польз.функц) - первый ваш исходный, второй с исключением "А"... запускаются один за другим.

Принтует ноль.... 


В этой функции используются локальные переменные, поэтму ее не надо запускать да раза как отдельную функцию, сделайте два цикла один за другим в одной функции, или объявите А как глобальную переменную. Я отбегу за сигаретами, а вы пока попробуйте, если не получится, стучите, как вернусь, разберемся. 
 
Desead:

Я не программер, но иногда простейшие вещи пишу себе сам. Написать не сложного робота можно на любом языке и это вообще не проблема. И хотелось не часть функций оформить в виде длл и вызывать их потом из мкл а именно целиком со своим интерфейсом написать робота без вызова метатрейдера. Благо щас полно понапридумывали различных visual  языков где это можно сделать без особого напряга

Ввиде DLL можно оформить не только отдельные функции, но и всю программу, написанную на другом языке, А еспи вы хотите вообще не использовать возможности терминала(более сотни различных встроенных функций, встроенные индикаторы сам интерфейс программы), то реч уже идет не о простеньком советнике, а о собственном терминале, своей разработки, и в этом я думаю, вам вряд ли смогут помочь, особенно в этой ветке.
 
rigonich:

В этой функции используются локальные переменные, поэтму ее не надо запускать да раза как отдельную функцию, сделайте два цикла один за другим в одной функции, или объявите А как глобальную переменную. Я отбегу за сигаретами, а вы пока попробуйте, если не получится, стучите, как вернусь, разберемся. 


ЕСТЬ!!!! маленькая ошибочка была...принтовать надо было не Ticket , а LastClosetPoz() и Sec_LastClosetPoz().

Уверен, что мой вариант не самый элегантный... зато работает...А как вставить два цикла в одну функцию... я не знаю...попробовал..пысыпались ошибки...да ну их к черту! (если вам не трудно -покажите - мне будет полезно, если нет - ну и ладно...) все равно спасибо.

 

Однако чую если мне понадобиться выяснить тикет 35-й закрытой сделки...с моим подходом у меня будут проблемы :)))) хахахх 

благо, это пока даже на горизонте не предвидится...максимум 3... 

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