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

 
Сделай глобальную или статическую булеву переменную типа флаг. Когда условие наступило и флаг=true открывай ордер и делай флаг=false. Теперь, если ордер закроется, новый ордер не будет открываться. Когда условие ушло, ставь опять флаг=True.
 
Roger:
Сделай глобальную или статическую булеву переменную типа флаг. Когда условие наступило и флаг=true открывай ордер и делай флаг=false. Теперь, если ордер закроется, новый ордер не будет открываться. Когда условие ушло, ставь опять флаг=True.

Как узнать, что ордер был открыл, но закрылся именно из-за условия N? Потому-что условий много, и наличие условия N не дает гарантию, что ордер заключен.

То есть мне надо знать, что ордер был заключен, но закрылся n свечей назад из-за срабатывания условия N. И если условие N исчезло, и прошло не более n свечей с момента закрытия ордера, то нужно снова открывать ордер.

 
Xaoss1990:

Как узнать, что ордер был открыл, но закрылся именно из-за условия N? Потому-что условий много, и наличие условия N не дает гарантию, что ордер заключен.

То есть мне надо знать, что ордер был заключен, но закрылся n свечей назад из-за срабатывания условия N. И если условие N исчезло, и прошло не более n свечей с момента закрытия ордера, то нужно снова открывать ордер.


Активней используйте Alert(), Print() с Логикой!
 
Xaoss1990:

Подскажите, пожалуйста, господа спецы!

Представьте ситуацию: сработал стоп, из-за срабатывания N-го условия. Но через пару свечек, N-ое условие отпало. С помощью каких функций можно снова заключить сделку после отпадания N-го условия. То есть нужно определить, что сработал стоп какое-то количество баров назад ИМЕННО из-за N-го условия, и так-как N-ое условие отпало, заключить сделку повторно!!!


если программно - при открытии ордера - есть магик и комментарий - информацию о том, по какому именно условию открыт ордер, можно шифровать в магике или комментарии

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

 
Xaoss1990:

Как узнать, что ордер был открыл, но закрылся именно из-за условия N? Потому-что условий много, и наличие условия N не дает гарантию, что ордер заключен.

То есть мне надо знать, что ордер был заключен, но закрылся n свечей назад из-за срабатывания условия N. И если условие N исчезло, и прошло не более n свечей с момента закрытия ордера, то нужно снова открывать ордер.

Не сильно усложняете? Ведь закрыто могло быть по условию Х, хотя при этом условие N также могло наступить.

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

 
 int CountH,NewCountH,CountL,NewCountL;
 double ResistH,ResistL;
 
 //========================
 
 int start(){

 //--------------------------
   double bid = Bid;
   double UPPprice = bid+3000.0*Point;
   double LOWprice = bid-3000.0*Point;
   NewCountH=0;
   ResistH=0;
   NewCountL=0;
   ResistL=0;
  
   while(LOWprice<UPPprice)
    {
      CountH=0;
      CountL=0;
      for(int i=1; i<=6000; i++){  
          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i))CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i))CountL++;
       } 
      if(CountH>NewCountH){NewCountH=CountH;ResistH=LOWprice;} 
      if(CountL>NewCountL){NewCountL=CountL;ResistL=LOWprice;}   
      LOWprice=LOWprice+5*Point;
    }
 //----------------------------
 
 return(0);
 }
Как "облегчить" этот цикл? Считает очень долго.
 
DhP:

Как "облегчить" этот цикл? Считает очень долго.


может чего не понял, но здесь:

          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i))CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i))CountL++;
одно и тоже условие
 
abolk:


может чего не понял, но здесь:

одно и тоже условие - при любых раскладах CountH равно CountL

Нет, Если цена выше Бид, то считает CountH, если ниже, то - CountL
 
DhP:
Нет, Если цена выше Бид, то считает CountH? если ниже, то - CountL


ускорить расчёт можно:

уменьшить i<=6000

 
abolk:


ускорить расчёт можно:

а) уменьшить i<=6000
б) расчитывать только в начале бара

а) Уменьшить количество i можно, но не желательно. Так он берет бары за год.

б) В начале бара... Наверное, это вариант. Работает на М15.

Однако, в любом случае, считает почти 2 секунды.

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