Закрытие половинных участков. - страница 15

 
Я использую это? В сочетании с "if(OpenOrdersThisPair(Symbol())>0)" выше, это должно держать советников отдельно от каждой пары? Я понимаю, о чем вы говорите. Есть предложения, как я могу отличить сделку, которая была уменьшена наполовину, от той, которая не была уменьшена, используя OrderOpenTime()? Небольшой пинок в правильном направлении...?

//+----------------------------------------------------------------------------------------------------------------------------------------+  
//| Check to see if any order open on this currency pair                                                                                   |
//+----------------------------------------------------------------------------------------------------------------------------------------+   

int OpenOrdersThisPair(string pair)
  {
   int total=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==pair) total++;
     }
   return(total);
  }
 
DomGilberto:
Я использую это? В сочетании с "if(OpenOrdersThisPair(Symbol())>0)" выше, это должно держать советников отдельно от каждой пары?

Нет, предположим, что у вас работают 2 советника и у каждого открыт ордер, у вас есть шанс 50:50, что последний ордер, выбранный() функцией OpenOrdersThisPair(), будет неправильным... функция вернет один, но у вас вполне может быть выбран неправильный ордер.
 
Простите меня, но я не понимаю, как это так? Я убеждаюсь, что OrderSymbol()==пара? Значит, соответствующий советник, который прикреплен к EURUSD, подхватит именно выбор ордера на EURUSD?
 
Это поможет разобраться? В журнале он говорит мне это? А как насчет "OrderSymbol()==OrderSymbol()" lol? если это ЭТОТ символ... не уверен, что это заумно или нет...

   if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
     {
     if(OrderSelect(OrderTicket(),SELECT_BY_TICKET, MODE_TRADES)==True)
         {   
         Print("The Symbol is: ", OrderSymbol());  
         }
         
         if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss() && OrderSymbol()==OrderSymbol())
               {
               CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
               }

         if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice() && OrderSymbol()==OrderSymbol()) // lol? If this symbol is, this symbol...
               {
               CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
               }
            
2013.08.08 18:51:21	2010.02.08 01:00  Trend Fishing 3 Exits GBPJPY,H1: The Symbol is: GBPJPY

 

А! Что, если я сравню OrderCloseTime() и OrderOpenTime()!?

Конечно, это был бы ЛУЧШИЙ способ сделать то, что я хочу? Таким образом, я смогу добавить столько функций OrderClose, сколько захочу? В конце концов, я мог бы просто выбрать сделку в истории, которая имеет такое же OrderOpenTime(), как и текущая "OP_BUY", но если OrderCloseTime() > OrderOpenTime(), то это остановит OrderClose(), закрывая половинки непрерывно!!!?

Кто-нибудь, пожалуйста, скажите мне, что мне здесь есть с чем работать :( хаха.

 
DomGilberto:
Простите меня, но я не понимаю, как это так? Я убеждаюсь, что OrderSymbol()==пара? Значит, соответствующий советник, который прикреплен к EURUSD, поймет, что ордер выбран на EURUSD?

Вы сначала выполняете OrderSelect()... затем проверяете...

if(OrderSymbol()==pair) total++;

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

Вам нужно сделать дополнительный цикл и найти правильный ордер, затем выйти из цикла ... тогда у вас будет правильный выбранный ордер.

 
Я запутался, я тестировал свой советник на 16 различных парах одновременно на этой неделе, и он никогда не выбирал неправильную пару? Я что-то упускаю?
 
DomGilberto:
Я запутался, я тестировал свой советник на 16 различных парах одновременно на этой неделе, и он никогда не выбирал неправильную пару? Я что-то упускаю?
Насколько я могу судить, кажется возможным, что он может выбрать неправильный ордер, я бы исправил это, чтобы быть уверенным, а не рисковать. Проверьте ваш код, если это не может произойти, то вам не нужно его исправлять.
 

DomGilberto:
I thought that too - It says I need OrderSelect() before using OrderType, but it works? I only ever have one order open at any given time...

I can't think of how to use OrderOpenTime() to my advantage and stop CloseHalfOrder being called every time...

Советник частично закрывает ордер, советник должен знать, какой ордер не закрывать снова, поэтому получите OrderOpenTime() перед частичным закрытием. Кодируйте советника, чтобы он больше не закрывал ордера на этой валютной паре с тем же самым OrderOpenTime().

 
SDC:

Советник частично закрывает ордер, советник должен знать, какой ордер не закрывать снова, поэтому получите OrderOpenTime() перед частичным закрытием. Кодируйте советника, чтобы он больше не закрывал ордера на этой валютной паре с тем же самым OrderOpenTime().


Да, теперь я начинаю понимать - я предполагаю, что мне нужно сравнить со сделками, которые закрылись в истории на том же OrderSymbol()?

Однако у меня есть проблема; я пытаюсь частично закрыть один и тот же "OP_BUY" или "OP_SELL" до 4 раз по разным ценам... Я думаю, что вопрос, который я должен задать, заключается в том, могу ли я получить способ, при котором у меня есть правило, что ВСЕ частичные закрытия (любых лотов и цен на ОДНОЙ данной сделке) будут частично закрываться только ОДИН раз при заданных параметрах "OrderClose()"...

Этот способ, который я рассматриваю сейчас, с сопоставлением OrderOpenTime(), по сути, будет работать только один раз, и будет ограничивать любой другой тип функции OrderClose()... Я хочу найти способ, чтобы одно правило применялось к 4 функциям OrderClose()... (если это имеет смысл?)

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