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

 
rigonich:

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


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

if  (OrderSelect( (LastClosetPoz (),SELECT_BY_TICKET)==true))  Print("Stop loss", OrderStopLoss());

 

ругается

')' - wrong parameters count G:\Program_Files_2\MT4-demo\experts\000.mq4 (57, 60)

не могу понять что ему надо?  

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

РАЗОБРАЛСЯ 

надо убрать  ==true....

что странно, ибо в примерах учебника всегда так пишется... 

а еще он ОКРУГЛИЛ значение стопа..до 4й цифры... 

 
lottamer:


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

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

 

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

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



int Ticket1,Ticket2;
//+------------------------------------------------------------------+
int fLastClosetPoz()
   {
   int Tot=OrdersHistoryTotal(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0; 
   if(Tot>0)
      {
      for(i=0;i<OrdersHistoryTotal();i++)
         {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
            {
            if(OrderSymbol()==Symbol())
               {
               if(OrderCloseTime()>time)
                  {
                  time=OrderCloseTime();Ticket1=OrderTicket();
               } 
            }
         }
         else continue;
      }
   }
   Tot=OrdersHistoryTotal();A=Ticket1;time=0;
   if(Tot>0)
      {
      for(i=0;i<OrdersHistoryTotal();i++)
         {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
            { 
            if(OrderTicket()==A)continue;
            if(OrderSymbol()==Symbol())
               {
               if(OrderCloseTime()>time)
                  {
                  time=OrderCloseTime();Ticket2=OrderTicket();
               } 
            }
         }
         else continue;
      }
   }
   return(0);
}
//+------------------------------------------------------------------+
P.S. А для определения 35-й закрытой сделки нужо использовать вложенный цикл(то есть цикл в цикле).
 
rigonich:


int Ticket1,Ticket2;
//+------------------------------------------------------------------+
int fLastClosetPoz()
   {
   int Tot=OrdersHistoryTotal(),A,i;Ticket1=-1;Ticket2=-1;datetime time=0; 
   if(Tot>0)
      {
      for(i=0;i<OrdersHistoryTotal();i++)
         {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
            {
            if(OrderSymbol()==Symbol())
               {
               if(OrderCloseTime()>time)
                  {
                  time=OrderCloseTime();Ticket1=OrderTicket();
               } 
            }
         }
         else continue;
      }
   }
   Tot=OrdersHistoryTotal();A=Ticket1;time=0;
   if(Tot>0)
      {
      for(i=0;i<OrdersHistoryTotal();i++)
         {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
            { 
            if(OrderTicket()==A)continue;
            if(OrderSymbol()==Symbol())
               {
               if(OrderCloseTime()>time)
                  {
                  time=OrderCloseTime();Ticket2=OrderTicket();
               } 
            }
         }
         else continue;
      }
   }
   return(0);
}
//+------------------------------------------------------------------+


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

после небольших махинаций...которые ЯВНО развивают мозг, заработал и этот код! :)) спасибо 

 
lottamer:


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

if  ( Print("Stop loss", OrderStopLoss()); )  Print("Stop loss", OrderStopLoss());

 

ругается

')' - wrong parameters count G:\Program_Files_2\MT4-demo\experts\000.mq4 (57, 60)

не могу понять что ему надо?  


Опять 45, в таком виде  OrderSelect(LastClosetPoz (),SELECT_BY_TICKET) по умолчанию выбирает среди отложенных и открытых ордеров, а там этого ордера нет. поставьте OrderSelect(LastClosetPoz (),SELECT_BY_TICKET,MODE_HISTORY).
 
lottamer:


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

после небольших махинаций...которые ЯВНО развивают мозг, заработал и этот код! :)) спасибо 


Просто распечатайте переменные  Ticket1 и Ticket2 после вызова функции.
 

rigonich

подскажите пожалуйста, в какой файл записываются глоб. переменные? Чтобы можно было быстро перебрасывать на другой терминал. 

 
rigonich:

Опять 45, в таком виде  OrderSelect(LastClosetPoz (),SELECT_BY_TICKET) по умолчанию выбирает среди отложенных и открытых ордеров, а там этого ордера нет. поставьте OrderSelect(LastClosetPoz (),SELECT_BY_TICKET,MODE_HISTORY).


неа....низяяяя...МОДЫ..работают только с SELECT_BY_POS. А тикет сам по себе! он абсолютно индивидуален, поэтому даже не нужно указывать где он

(дочитайте там ответ..я дописывал решение) 

-------Parameters:

index - Order index or order ticket depending on the second parameter.
select - Selecting flags. It can be any of the following values:
SELECT_BY_POS - index in the order pool,
SELECT_BY_TICKET - index is order ticket.
pool - Optional order pool index. Used when the selected parameter is SELECT_BY_POS. It can be any of the following values:
MODE_TRADES (default)- order selected from trading pool(opened and pending orders),
MODE_HISTORY - order selected from history pool (closed and canceled order).
 
lottamer:


неа....низяяяя...МОДЫ..работают только с SELECT_BY_POS. А тикет сам по себе! он абсолютно индивидуален, поэтому даже не нужно указывать где он

-------Parameters:

index - Order index or order ticket depending on the second parameter.
select - Selecting flags. It can be any of the following values:
SELECT_BY_POS - index in the order pool,
SELECT_BY_TICKET - index is order ticket.
pool - Optional order pool index. Used when the selected parameter is SELECT_BY_POS. It can be any of the following values:
MODE_TRADES (default)- order selected from trading pool(opened and pending orders),
MODE_HISTORY - order selected from history pool (closed and canceled order).

 


Простите, зарапортовался, вы правы, просто у вас в строке  if  ( Print("Stop loss", OrderStopLoss()); )  Print("Stop loss", OrderStopLoss()); нет условия, а вместо него вставлен оператор.
 
Desead:

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


Ясно. В поставке МТ идут примеры написания длл на С\С++ оформлено в виде проекта для создания длл.

Каталог: Каталог_В_котором_Расположен_МТ\experts\samples. Берите его и правьте под Ваши нужды. Для того, чтобы с ним разобраться глубоких знаний С++ не нужно. Достаточно знать основы и синтаксис С.

Обратите внимание:  проект должен быть с .def файлом, иначе длл не подключите. В примере именно такой проект как надо.
 
xant:

rigonich

подскажите пожалуйста, в какой файл записываются глоб. переменные? Чтобы можно было быстро перебрасывать на другой терминал. 

Не знаю, поискал, не нашел, но наверное можно открыть сервис-->глобальные переменные в терминале, и скопировать их оттуда, попробуйте.

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