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

 
hoz :


현재 다음 거래 기능이 있습니다.

수정이 이루어지지 않습니다.


Trade() 함수에서 주문을 선택하지 않았습니다.
 
rigonich :

나는 당신이 스크립트에서 원하는 것을 이해하지 못합니다.


시작 시 아카이브 차트에 표시되는 프로그램이 필요합니다.

움직임의 강도와 이 움직임의 시간에 대해 지정된 매개변수가 있는 가격 움직임의 섹션이 시각적으로 표시됩니다.

예를 들어 - 400점 수정, 30분 만에 완료. 지난 1년 동안 이 범위의 모든 수정 사항이 적용되었습니다.

수동으로 시각적으로 찾는 것은 불가능합니다. 왜곡. 색상 지정으로 바람직 할 것이므로 즉시 눈에.

___

나는 다른 프로그램 "Histoty"를 보았습니다. 그러나 그들은 계정 기록만 렌더링합니다.

하지만 주어진 필터에 대한 가격대를 찾지 못했습니다.

 
rigonich :

Trade() 함수에서 주문을 선택하지 않았습니다.


그런 것이 있습니다. 여기에서 수정됩니다.

 bool Trade ( int signal)
{
   int total = OrdersTotal () - 1 ;
  
  FindOrders();

   if (signal == SIGNAL_BUY)                                                           // Если сигнал на покупку и открытых ордеров нет..
     if (!OpenBuy())                                                                   // открываем лимитный ордер на покупку
       return ( false );                                                                
      
   if (signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if (!OpenSell())
       return ( false );                                                               // открываем лимитный ордер на продажу
       
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
    {
       if (OrderStopLoss() == 0 || OrderTakeProfit() == 0 )
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }
  }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

   return ( true );
}

수정 기능은 다음과 같습니다.

 void OrdersModifying()
{
   int total = OrdersTotal () - 1 ;
   double sl = 0 , tp = 0 ;
  
   for ( int i=total; i>= 0 ; i--)
  {
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == true )                             // Если ордер есть и он выбран..
    {
       if (g_type == OP_BUY)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() - i_sl*pt, Digits );                     // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() + i_tp*pt, Digits );                     // Получаем значение тейкпрофита для выбранного ордера
      }
       if (g_type == OP_SELL)
      {
         if (i_sl != 0 )                                                                 // Если входной параметр стоп-лосса не равен 0, то..
           sl = NormalizeDouble (OrderOpenPrice() + i_sl*pt, Digits );                 // Получаем значение стоп-лосса для выбранного ордера
         if (i_tp != 0 )                                                                 // Если входной параметр тейкпрофита не равен 0, то..
           tp = NormalizeDouble (OrderOpenPrice() - i_tp*pt, Digits );                 // Получаем значение тейкпрофита для выбранного ордера
      }
       if (sl != 0 || tp != 0 )                                                             // Если полученные значения sl и tp не равныы 0, то..
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400 ,Lime);       // Модифицируем ордер
      }
    }
  }
}

이상하지만 다시 정류장이없고 출구에서 걸립니다.

 
TUNGUS :


시작 시 아카이브 차트에 표시되는 프로그램이 필요합니다.

움직임의 강도와 이 움직임의 시간에 대해 지정된 매개변수가 있는 가격 움직임의 섹션이 시각적으로 표시됩니다.

예를 들어 - 400점 수정, 30분 만에 완료. 지난 1년 동안 이 범위의 모든 수정 사항이 적용되었습니다.

수동으로 시각적으로 찾는 것은 불가능합니다. 왜곡. 색상 지정으로 바람직 할 것이므로 즉시 눈에.

___

나는 다른 프로그램 "Histoty"를 보았습니다. 그러나 그들은 계정 기록만 렌더링합니다.

하지만 주어진 필터에 대한 가격대를 찾지 못했습니다.


History, History_Draw - 테스트할 때 Expert Advisors처럼 작동합니다.

여기에서 주어진 매개변수에 따라 기록에서 수정 사항을 보려면 이와 같은 것이 필요합니다.

 

Symbol() MT4 관련 문제:

설명할 2가지 기능:

 string    SymbolOK()
{

   string    value ;
   string    argument = "ANYTHING" ;

   if ( false )
   {
       value = argument;
   }

   return ( value );

}

string    SymbolPROBLEM()
{

   string    value ;
   string    argument = Symbol();

   if ( false )
   {
       value = argument;
   }

   return ( value );

}

첫 번째를 실행하면 빈 문자열이 출력됩니다.

 int start()
{
   Comment (SymbolOK());
   return ( 0 );
}

다음은 두 번째 함수 문자열 식별자 "EURUSD"입니다(차트에 따라 다르지만 출력은 함수 논리에 따라 빈 문자열이 있어야 함).

 int start()
{
   Comment (SymbolPROBLEM());
   return ( 0 );
}

무엇이 잘못되었는지 이해하도록 도와주시겠습니까? 감사해요

 
rigonich :

Trade() 함수에서 주문을 선택하지 않았습니다.

그런데. 그리고 Trade() 함수에서 주문을 선택하는 요점은 무엇입니까? 주문이 선택되고 수정되는 OrdersModifying() 함수 를 호출합니다. 저것들. 원래 버전이 정확했습니다!
 
hoz :


그런 것이 있습니다. 여기에서 수정됩니다.

수정 기능은 다음과 같습니다.

이상하지만 다시 정류장이없고 출구에서 걸립니다.



줄 앞의 OrderSelect (g_ticket,SELECT_BY_TICKET) if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)
 
TUNGUS :


History, History_Draw - 테스트할 때 Expert Advisors처럼 작동합니다.

여기에서 주어진 매개변수에 따라 기록에서 수정 사항을 보려면 이와 같은 것이 필요합니다.


역사에서, 아니면 차트에서? 어떤 형태로 결과를 보고 싶습니까? 차트 창에서 별도의 창에서 표 형식으로 인쇄 된 경우 어떤 데이터 로 다른 색상의 양초 형태로 움직임의 시작과 끝을 연결하는 선 형태로? 좀 더 구체적으로, 시간이 되면 해줄게.
 
rigonich :

줄 앞의 OrderSelect(g_ticket,SELECT_BY_TICKET) if(OrderStopLoss() == 0 || OrderTakeProfit() == 0)


내가 한 일은 다음과 같습니다.

 bool Trade ( int signal)
{
   int total = OrdersTotal () - 1 ;
  
  FindOrders();

   if (signal == SIGNAL_BUY)                                                           // Если сигнал на покупку и открытых ордеров нет..
     if (!OpenBuy())                                                                   // открываем лимитный ордер на покупку
       return ( false );                                                                
      
   if (signal == SIGNAL_SELL)                                                       // Если сигнал на продажу и открытых ордеров нет..
     if (!OpenSell())
       return ( false );                                                               // открываем лимитный ордер на продажу

     if ( OrderSelect (g_ticket,SELECT_BY_TICKET,MODE_TRADES) == true )
    {
       if (OrderStopLoss() == 0 || OrderTakeProfit() == 0 )
        OrdersModifying();                                                             // Модифицируем ордер, добавим SL и TP
    }    
 // if(UseBU == true)
   //  MovingStopLossToBU();                                                         // Перевод в б.у. по достижению некоторого значения TP

   return ( true );
}

정류장과 테이크가 없습니다. 오류 130이 로그에 기록되어 있으며 올바른 발이 아니라고 말합니다. 이유를 알 수 없습니다.

 
hoz :


내가 한 일은 다음과 같습니다.

정류장과 테이크가 없습니다. 발이 올바르지 않다는 오류 130이 로그에 기록됩니다. 이유를 알 수 없습니다.


아니요, OrderSelect (g_ticket,SELECT_BY_TICKET,MODE_TRADES)만 있으면 OrdersModifying()에 그대로 둘 수 있습니다.

//+----------------------------------------------- --------------------+

무효 OrdersModifying()

{

주문 선택(g_ticket,SELECT_BY_TICKET,MODE_TRADES);

if(g_type == OP_BUY)

{

if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() - i_sl*pt, 숫자); // 손절매 입력 매개변수가 0이 아니면..

// 선택한 주문 에 대한 손절매 값을 가져옵니다.

if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() + i_tp*pt,자리수); // takeprofit 입력 매개변수가 0이 아니면..

// 선택한 주문에 대한 이익실현 값을 가져옵니다.

}

if(g_type == OP_SELL)

{

if(i_sl != 0)sl = NormalizeDouble(OrderOpenPrice() + i_sl*pt,자리수); // 손절매 입력 매개변수가 0이 아니면..

// 선택한 주문에 대한 손절매 값을 가져옵니다.

if(i_tp != 0)tp = NormalizeDouble(OrderOpenPrice() - i_tp*pt,자리수); // takeprofit 입력 매개변수가 0이 아니면..

// 선택한 주문에 대한 이익실현 값을 가져옵니다.

}

if(sl != 0 || tp != 0) // 수신한 sl과 tp의 값이 0이 아니면..

{

OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,OrderOpenTime() + 86400,라임); // 주문 수정

}

}