포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 96

 
Vinin :

중괄호가 모두 있는지 확인하십시오. 그들은 장소에 없습니다. 이 때문에 논리가 엉성하다. 그리고 대부분의 경우 결과는 예상한 것과 다릅니다.
비트, 멀리 있었어? 안본지 오래됐어...
 
artmedia70 :
비트, 멀리 있었어? 안본지 오래됐어...


오늘 집에 있었다(거의)
 
Vinin :

오늘 집에 있었다 (거의)
2주째 집에 거의 다 왔네요 :)
 
Vinin :

중괄호가 모두 있는지 확인하십시오. 그들은 장소에 없습니다. 이 때문에 논리가 엉성하다. 그리고 대부분의 경우 결과는 예상한 것과 다릅니다.

표시기 코드에 대해 이야기하는 경우 대괄호로 모든 것이 정상이고 표시기가 작동하고 화살표 형태로 신호를 제공합니다(구매/판매-4 및 5 표시기 버퍼). 그러나 Expert Advisor의 표시기에서 이러한 화살표를 읽을 때 말도 안되는 것으로 판명되었습니다. 나는 Expert Advisor를 완전히 제공하지 않았습니다. 왜냐하면 중요한 것은 계산 방법을 이해하고 신호를 계산하고 해당 작업을 수행하는 것이기 때문입니다. 일반적으로 문제는 신호를 읽는 데 있습니다.
 
paladin80 :

여기에 올바른 코드를 삽입하려면 먼저 SRC를 클릭한 다음 거기에 코드를 복사하십시오.

특정 시점에서 올바르게 이해했다면 OP_BUYSTOP 하나 와 OP_SELLSTOP 하나 를 열어야 합니까? 현재 다른 대기 중인 주문이 있을 수 있습니까? 예. 지연기가 있지만 새 것을 열기 전에 이전 것을 삭제해야 합니까?



 if (hour1 == TimeHour( TimeCurrent ()) && minute1 == TimeMinute( TimeCurrent ())) // если время подошло то
{
min=Low[iLowest( Symbol (), 0 ,MODE_LOW, 6 , 1 )]; // вычисляем минимальную цену последних 6 свечей
max=High[iHighest( Symbol (), 0 ,MODE_HIGH, 6 , 1 )]; // вычисляем максимальную цену последних 6 свечей
double volum=max-min; // общий объем локалки последних 6 свечей М5

if ((volum<=n)== true ) // если объем свечей меньше или равно n пунктов 
{ 
OrderSend ( Symbol (), OP_BUYSTOP, параметры); // открываем отложенный ордер байстоп
OrderSend ( Symbol (), OP_SELLSTOP, параметры); // открываем отложенный ордер селлстоп
}

if ( OrderSelect ( 1 ,SELECT_BY_POS,MODE_HISTORY)&& OrderTakeProfit()== true ) ///если первый открывшийся отложенный ордер закрыт с профитом
{
OrderDelete( 1 ); // удаляем второй открытый отложенный ордер
}

}
bool closeorder; //определим  закрытие ордеров
closeorder= true ;

if (closeorder== true ) //
{
int hour2 = TimeHour(StrToTime(time2)); // вычисляем время закрытия ордеров
int minute2 = TimeMinute(StrToTime(time2));

if (hour2 == TimeHour( TimeCurrent ()) && minute2 == TimeMinute( TimeCurrent ())) // если время 
{
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) // определяем количество открытых позиций, и отложенных ордеров и закрываем все возможные позиции, и отложенные ордера
 if ( OrderSelect ( 1 ,SELECT_BY_POS,MODE_TRADES)) break ; //определяем место где будем искать ( рабочие позиции)
if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),slippage); // Закрытие ордера бай если такой есть
if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage); //Закрытие ордера селл если такой есть
{
for ( int D= OrdersTotal ()- 1 ; D>= 0 ; D--)
if ( OrderSelect (D,SELECT_BY_TICKET,MODE_TRADES)== true )
if (OrderType()==OP_BUYSTOP ) OrderDelete(D); //удаляем отложенный байстоп
if (OrderType()==OP_SELLSTOP) OrderDelete(D); // удаляем отложенный селлстоп

나는 그것을 명확하게하기 위해 이미 공통 코드를 던졌습니다. 하루가 끝나면 가능한 모든 포지션과 주문을 닫고 싶었습니다..

그리고 2개의 미결 주문 이 열리는 동안(오전), 계획에 따르면, 그 이전에 열려 있는 주문이나 포지션이 없기 때문입니다. 저녁에는 특정 시간에 모두 문을 닫아야 합니다. 적어도 주문의 완전한 마감이 올바르게 설명되었는지 궁금합니다. =)))



 
artmedia70 :

솔직히 말해서, 나는 당신의 기능의 논리를 모릅니다. 개체를 제거해야 하는지 아니면 빌드해야 하는지 모르겠습니다. 당신이 그녀에게 무엇을 원하는지 말해 주세요. 그러면 우리는 논리적인 문제가 어디에 있는지 알게 될 것입니다. 그러나 f-tion이 그래프를 작성하려고 하기 때문에. 객체이지만 오류가 발생하므로 이미 존재합니다. 프로그램의 논리에 따르면 다음은 무엇입니까? 다른 이름으로 새 개체를 만들 수 있습니다(예: 개체 이름에 현재 시간 추가(TimeToStr(TimeCurrent()))). 또는 개체가 이미 존재하지만 속성을 변경해야 하는 경우에는 새로운 방식으로 개체를 구축하되 속성을 변경하기만 하면 됩니다. 그러면 오류가 더 이상 나타나지 않습니다.

모든 것이 간단합니다. 가장 중요한 것은 당신이 원하는 것을 아는 것입니다... :)



실제로 이 기능은 인쇄물을 시각적으로 대체하는 것과 같으며 화면에 모든 것을 표시할 뿐입니다. 아직 잘 쓰여지지는 않았지만 잘 되네요..:) 알아내서 다시 쓰겠습니다. 그리고 그 질문에 대해 생각해 볼 수 있습니다.

그건 그렇고, 새 개체를 만들지 않고 기존 개체의 속성을 변경하면 다시 ... Golovnyak이 됩니다. 계획대로 화면에 마지막 N -jamb를 표시해야 합니다. 극단적인 대상을 지속적으로 다시 작성하면 특정 캔트(오류)가 있는 단 하나의 대상만 있게 됩니다. 더 나아가 루프를 통해 필요한 만큼 객체를 선택하고 다시 작성할 수 있지만 이는 분명히 노력할 가치가 없기 때문입니다. 이 기능은 테스트용일 뿐이고 할 일이 너무 많기 때문에 귀찮게 하고 싶지 않습니다. 어떻게든 그 함수의 코드를 수정하고 마음에 가져다 놓으면 생각할 수 있습니다!

 

그런 질문이 있습니다. 실험적인 측면에서 나는 그런 것을 씁니다. 특정 신호에 따라 자연스럽게 하나씩 열리는 주문 팩이 수집됩니다. 마지막 주문이 마감되면 다른 모든 시장과 일반적으로 보류 중인 주문 을 닫아야 합니다...

물론 배열을 통해 모든 것을 작성할 수 있지만 저는 일반적인 방법을 사용했습니다. 이와 같이:

 for ( int li_ord= OrdersTotal ()- 1 ; li_ord>= 0 ; li_ord--)
   {
       if (! OrderSelect (li_ord,SELECT_BY_POS)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
        
      g_ticket = OrderTicket();
      g_type = OrderType();

       // Закрытие всех ордеров, если последний ордер закрыт
       if (GetLastOrderState() != 0 )
      {
           if (g_type > 1 )
          {
              DeletePendingOrders(g_ticket);
          }
           else
          {
              CloseMarketOrders(g_ticket);
          }
      }
   }

상태:

 if (GetLastOrderState() != 0 )

마지막으로 열린 주문이 마감되었는지 확인합니다! 다음으로, 보류 및 마감 시장 주문을 제거하기 시작합니다...


여기에 기능 자체가 있으므로 문제가 있음을 의심할 여지가 없습니다. (비판과 의견은 환영합니다. :))) ):

 //+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
double GetLastOrderState()
{
   double lastOrderCloseTime = - 1 ,                   // Время закрытия последнего ордера
          lastOrderOpenTime = - 1 ;                     // Время открытия последнего ордера
   
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
  
       if (lastOrderOpenTime < OrderOpenTime())
      {
          lastOrderOpenTime = OrderOpenTime();
          lastOrderCloseTime = OrderCloseTime();
      }
   }
   
   return (lastOrderCloseTime);
}
 
vovak_85 :

표시기 코드에 대해 이야기하는 경우 대괄호로 모든 것이 정상이고 표시기가 작동하고 화살표 형태로 신호를 제공합니다(구매/판매-4 및 5 표시기 버퍼). 그러나 Expert Advisor의 표시기에서 이러한 화살표를 읽을 때 말도 안되는 것으로 판명되었습니다. 나는 Expert Advisor를 완전히 제공하지 않았습니다. 왜냐하면 중요한 것은 계산 방법을 이해하고 신호를 계산하고 해당 작업을 수행하는 것이기 때문입니다. 일반적으로 문제는 신호를 읽는 데 있습니다.
이것은 당신의 것입니다:
 double L_B= iCustom ( 0 , 0 , "Makedonskii" ,MM,MP, 0 , 4 );

double L_S= iCustom ( 0 , 0 , "Makedonskii" ,MM,MP, 0 , 5 );

그리고 다음과 같이 필요합니다.
 double L_B= iCustom ( NULL , 0 , "Makedonskii" ,MM,MP, 4 , 0 );

double L_S= iCustom ( NULL , 0 , "Makedonskii" ,MM,MP, 5 , 0 );
이 같은.
 
hoz :

실제로 이 기능은 인쇄물을 시각적으로 대체하는 것과 같으며 화면에 모든 것을 표시할 뿐입니다. 아직 잘 쓰여지지는 않았지만 잘 되네요..:) 알아내서 다시 쓰겠습니다. 그리고 그 질문에 대해 생각해 볼 수 있습니다.

그건 그렇고, 새 개체를 만들지 않고 기존 개체의 속성을 변경하면 다시 ... Golovnyak이 됩니다. 계획대로 화면에 마지막 N -jamb를 표시해야 합니다. 극단적인 대상을 지속적으로 다시 작성하면 특정 캔트(오류)가 있는 단 하나의 대상만 있게 됩니다. 더 나아가 루프를 통해 필요한 만큼 객체를 선택하고 다시 작성할 수 있지만 이는 분명히 노력할 가치가 없기 때문입니다. 이 기능은 테스트용일 뿐이고 할 일이 너무 많기 때문에 귀찮게 하고 싶지 않습니다. 어떻게든 그 함수의 코드를 수정하고 마음에 가져다 놓으면 생각할 수 있습니다!

빈 표시기 창에 메시지를 표시하는 함수를 만든 적이 있습니다. 출력 라인의 색상을 사용자 정의할 수 있습니다. 그녀는 이미 조정되었습니다. 그렇다면 공유할 수 있습니다.
 
r772ra :
이것은 당신 것입니다: 그리고 당신은 다음과 같이 필요합니다:
이 같은.

수정해주셔서 감사합니다만 알고리즘이 제대로 작동하지 않았습니다...