[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 347

 

안녕하세요, 질문입니다. 작업이 고정 프랙탈로만 수행되도록 코드를 작성하는 방법은 무엇입니까?

프랙탈이 고정되면 ....

내 프랙탈

int start()
  {
//----
     double CenBuy = High[isFractalUp()];
     double CenSell = Low[isFractalDn()];

   return ( 0 );
}

int isFractalUp()
{
 for ( int i= 0 ; i != 10 ; i++)
 {
 if ( iFractals ( NULL , 0 , MODE_UPPER, i)!= NULL ) return (i);
 }
 return (- 1 );
}
 
int isFractalDn()
{
 for ( int i= 0 ; i != 10 ; i++)
 {
 if ( iFractals ( NULL , 0 , MODE_LOWER, i)!= NULL ) return (i);
 }
 return (- 1 );
}
 
hoz :

흠. 네, 각 방향의 예금 개수가 같으면 이런 식으로 해당 예금을 문제 없이 검색합니다. 그리고 다른 경우이 옵션은 내가 이해한대로 작동하지 않습니다.

그런 다음 지연을 유발한다는 사실을 확인하고 가장 멀리 떨어진 반대쪽을 제거합니다.

이 모든 것은 번에 사실과 연기에 대해서만 수행됩니다. 당신이 시도하는 것처럼 트리거된 수와 삭제된 수를 펜스할 필요가 없습니다. 한 틱에 보증금을 변환한다는 사실을 알게 될 것입니다. 다른 모든 트리거(나중에 발생하는 경우)는 다음 틱에 의해 결정됩니다.

 
아는 사람 말해줘 평일 테스터의 결과가 주말의 결과와 다른 이유는 무엇입니까? 알파리
 

베레즈누이   확산으로 인해 주말에는 몇 배 더 큽니다.

 

친애하는 프로그래머 여러분, 아래는 구매 및 판매 주문을 계산하는 코드이므로 하나의 구매 또는 판매 주문만 열릴 수 있습니다.

정수 CountBuy()
{
정수 개수 = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(무역, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == 마술)
{
if(주문 유형() == OP_BUY)
카운트++;
}

}
반환(카운트);
}
//+----------------------------------------------- --------------------+
정수 CountSell()
{
정수 개수 = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(무역, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == 마술)
{
if(주문 유형() == OP_SELL)
카운트++;
}

}
반환(카운트);
}

그리고 모든 것이 작동하는 것처럼 보이지만 내 Expert Advisor에는 TP 및 SL을 사용하는 일부 촛대 패턴에 대한 매매 조건이 있습니다. 따라서 조건이 충족되고 TP가 작동하면 0개의 양초가 형성되는 순간에 주문을 여는 조건이 계속 true이고 새 주문이 즉시 열리므로 더 이상 필요하지 않습니다. 따라서 추가 주문을 금지하는 데 어떤 코드를 사용할 수 있는지 알려주십시오. 고문 자체가 첨부 파일에 있습니다.

파일:
expert.mq4  4 kb
 
artmedia70 :

그런 다음 지연을 유발한다는 사실을 확인하고 가장 멀리 떨어진 반대쪽을 제거합니다.

이 모든 것은 번에 사실과 연기에 대해서만 수행됩니다. 당신이 시도하는 것처럼 트리거된 수와 삭제된 수를 펜스할 필요가 없습니다. 한 틱에 보증금을 변환한다는 사실을 알게 될 것입니다. 다른 모든 트리거(나중에 발생하는 경우)는 다음 틱에 의해 결정됩니다.



틱당 패스가 더 많으면 어떻게 됩니까? 예를 들어 지연 사이의 간격이 매우 작은 경우 둘 이상의 지연이 작동할 수 있습니다. Ess-하지만 필요한 조치를 제시간에 수행할 시간이 없습니다.
 
hoz :

틱당 더 많은 패스가 있으면 어떻게 됩니까? 예를 들어 지연 사이의 간격이 매우 작은 경우 둘 이상의 지연이 작동할 수 있습니다. Ess-하지만 필요한 조치를 제시간에 수행할 시간이 없습니다.
현재 표시줄에서 트리거된 주문을 검색하고 동일한 주기에서 보류 중인 주문을 제거하기 위해 열린 위치 에서 순환합니다.
 
artmedia70 :
현재 표시줄에서 트리거된 주문을 검색하고 동일한 주기에서 보류 중인 주문을 제거하기 위해 열린 위치에서 순환합니다.


글쎄, 그것은 다시주기를 얻고 다시 모든 것이 철거 될 것입니다. 글쎄, 현재 조건이 있는 버전에서:

 while (ordersToDelete > 0 )                       // Если есть ордера, которые требуется удалить..
   {
      OrderDelete(s_ticket,Black);
      ordersToDelete--;                         // Уменьшаем количество требуемых ордеров для удаления на 1, т.к. строкой выше..
                                               // .. один отложенник уже удалили
   }

저것들. orderToDelete 가 0이 될 때까지 삭제해야 합니다. 그리고 모든 것을 내려놓습니다. 모든 것이 기초적인 것처럼 보이지만 일종의 혼란이 일어나고 있습니다. 쓸모없는 교과서에는 그런 순간에 대한 것이 전혀 없습니다. 이미 이리 저리 꼬이고 다른 방법으로 다시 써도 무화과가 제대로 작동하지 않습니다.

 

다르게 다시 작성:

 //+-------------------------------------------------------------------------------------+
//| Удаление несработанных отложеннык шортов                                            |
//+-------------------------------------------------------------------------------------+
void DeletePendingSells( int & amountOfCurrPending)
{
   int total = OrdersTotal () - 1 ,
       ordersToDelete = level - amountOfCurrPending,   // Количество отложек, которые требуется удалить
       s_ticket = - 1 ,                                 // Тикет искомого ордера
       np = - 1 ;                                       // Номер позиции искомого ордера
   amountOfCurrPendingBuys = 0 ;                       // Количество текущих отложек на покупку
   amountOfCurrPendingSells = 0 ;                       // Количество текущих отложек на продажу

   double OOP = 20.0 ;                                 // Зададим значение цены открытия отложки, которой не может быть..
   
   if (ordersToDelete == 0 ) return ( 0 );               // Если ничего удалять не нужно, выйдем из функции

   for ( int i=total; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS)) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderType() != OP_SELLSTOP) continue ;         // Работает только с шортовыми ордерами
      
       if (OOP > OrderOpenPrice())
      {
          OOP = OrderOpenPrice();                   // Ищется ордер, с минимальной ценой открытия
          np = i;
      }
   }
   if ( OrderSelect (np,SELECT_BY_POS))
   {
      s_ticket = OrderTicket();                 // Получаем тикет ордера с минимальной ценой открытия
      OrderDelete(s_ticket,Black);
   }
   
   return ( 0 );
}

김도 보고 있다. 최소 시작 가격 이 있는 주문을 찾아 해당 위치를 결정하고 이 주문을 선택하고 티켓을 결정하고 삭제했습니다. 그러나 제거되지 않습니다.

 
주문 티켓 과 그 위치를 기억하지 못하는 이유는 무엇입니까? 그러한 주문이 없으면 직접 송금은 어떻게 됩니까? 제로 오더를 삭제하시겠습니까?
사유: