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

 

친애하는, 도움이 필요합니다.

나는 교과서 (tradingexpert.mq4)에서 회계, 개설 및 마감 주문에 대한 코드를 가져 왔습니다. 코드는 한 위치에서 작동하도록 설계되었습니다. 5개의 직위가 있어야 합니다.

코드를 약간 수정하면 포지션이 필요한 양만큼 열리는 방식(변경된 라인은 굵게 강조 표시)으로 이루어지지만, 변경 시에는 한 포지션만 닫히고 반대 포지션은 즉시 열렸습니다.

반전 중에 모든 위치가 닫히고 반대 위치만 열리도록 하는 방법은 무엇입니까?

   // Учёт ордеров
   Symb= Symbol ();                               // Название фин.инстр.
   Total= 0 ;                                     // Количество ордеров
   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         if ( OrderSymbol ()!=Symb) continue ;       // Не наш фин. инструм
         if ( OrderType ()> 1 )                     // Попался отложенный
           {
             Alert ( "Обнаружен отложенный ордер. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total> 5 )                           // Было не более одного орд, стало не более пяти
           {
             Alert ( "Несколько рыночных ордеров. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket= OrderTicket ();                   // Номер выбранн. орд.
         Tip   = OrderType ();                     // Тип выбранного орд.
         Price = OrderOpenPrice ();               // Цена выбранн. орд.
         SL    = OrderStopLoss ();                 // SL выбранного орд.
         TP    = OrderTakeProfit ();               // TP выбранного орд.
         Lot   = OrderLots ();                     // Количество лотов
        }
     }
   // Открытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Total < 5 && Opn_B== true )     // Открытых орд. нет +. Было Total < 1, стало Total < 5
        {                                       // критерий откр. Buy
         RefreshRates ();                         // Обновление данных
         SL= Bid - New_Stop(StopLoss)* Point ;     // Вычисление SL откр.
         TP= Bid + New_Stop(TakeProfit)* Point ;   // Вычисление TP откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb, OP_BUY ,Lts, Ask , 2 ,SL,TP); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
   // Закрытие ордеров
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Tip== 0 && Cls_B== true )                 // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert ( "Попытка закрыть Buy " ,Ticket, ". Ожидание ответа.." );
         RefreshRates ();                         // Обновление данных
         Ans= OrderClose (Ticket,Lot, Bid , 2 );       // Закрытие Buy
         if (Ans== true )                         // Получилось :)
           {
             Alert ( "Закрыт ордер Buy " ,Ticket);
             break ;                               // Выход из цикла закр
           }
         if (Fun_Error(GetLastError())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
 
Forexman77 :

친애하는, 도움이 필요합니다.

나는 교과서 (tradingexpert.mq4)에서 회계, 개설 및 마감 주문에 대한 코드를 가져 왔습니다. 코드는 한 위치에서 작동하도록 설계되었습니다. 5개의 직위가 있어야 합니다.

코드를 약간 수정하면 포지션이 필요한 양만큼 열리는 방식(변경된 라인은 굵게 강조 표시)으로 이루어지지만, 변경 시에는 한 포지션만 닫히고 반대 포지션은 즉시 열렸습니다.

반전 중에 모든 위치가 닫히고 반대 위치만 열리도록 하는 방법은 무엇입니까?


티켓을 Ticket[5]의 배열로 만들고 여기에 5개의 티켓을 모두 저장합니다. 각각 닫을 때 모든 티켓에 대한 주기입니다.
 
Vinin :

도서관 이용 수준에 따라 초심자와는 관련이 없습니다. 나는 당신의 코드를 보았고, 그것을 알아내는 데 2주가 필요합니다. 더 이상. 그래서 나는 당신이 대답을 얻을 것이라고 생각하지 않습니다.
Vitya, 여기에서 아무 것도 이해할 필요가 없습니다. 사람은 한 "샌드박스"(해당 라이브러리가 있는 EA)의 전역 변수 가 다른 "샌드박스"(컴파일된 라이브러리)에서 표시되기를 원합니다. :)))
 

친애하는, 나는 당신이 비난하지 말고 단순히 돕고 제안하기를 바랍니다. 나는 멋진 프로는 아니지만 코드 수집가입니다.그래서 표시기를 조립했습니다.

 #property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
{
SetIndexStyle ( 0 , DRAW_HISTOGRAM , EMPTY , 2 );
SetIndexBuffer ( 0 ,Buffer);
return ( 0 );
}
// -------------------------------------------------------------------

int deinit()
{
return ( 0 );
}
//--------------------------------------------------------------------

int start()
{
int StartBar = Bars - IndicatorCounted () - 1 ;
for ( int i = StartBar; i >= 0 ; i--)
{
if ( TimeDayOfWeek ( Time [i]) < TimeDayOfWeek ( Time [i+ 1 ]))
Buffer[i] = 0 ;
else
Buffer[i] = Buffer[i+ 1 ];
if ( Close [i]> Close [i+ 1 ]&& Close [i+ 1 ]>= Close [i+ 2 ]){ //если текущее и преддыдущее движение растут
Buffer[i] += NormalizeDouble (( Close [i] - Close [i+ 1 ])/ Point , 0 );}
if ( Close [i]< Close [i+ 1 ]&& Close [i+ 1 ]< Close [i+ 2 ]){ //если текущее и преддыдущее движение падают
Buffer[i] += NormalizeDouble (( Close [i+ 1 ] - Close [i])/ Point , 0 );}
if ( Close [i]> Close [i+ 1 ]&& Close [i+ 1 ]< Close [i+ 2 ]){ //если текущее лвижение растет а предыдущее падает
Buffer[i] += NormalizeDouble (( Close [i+ 1 ] - Close [i])/ Point , 0 );}
if ( Close [i]< Close [i+ 1 ]&& Close [i+ 1 ]>= Close [i+ 2 ]){ //если текущее движение падает а предыдущее растет
Buffer[i] += NormalizeDouble (( Close [i] - Close [i+ 1 ])/ Point , 0 );}
}
return ( 0 );
}
//--------------------------------------------------------------------

그것은 한 주 동안 포인트의 합계와 합계의 역학을 보여줍니다. 더 작은 시간 프레임에서 Close[i+2]에서 Close[i+1]까지의 이전 이동을 계속하면 현재 이동 Close[i]는 다음과 같습니다. 플러스, 반대하면 마이너스입니다. 주의 시작은 처음부터 시작을 제공합니다. 다시 그려지지 않습니다. 프로그램이 금요일의 마감을 볼 수 있도록 개념 대신에 어떻게든 규정할 필요가 있습니다 - 이것은 DayOfWeek와 숫자 5(금요일의 숫자)를 사용하여 수행할 수 있다는 것을 이해하지만 이것이 어떻게 될 수 있습니까? 실질적으로? 돕다.

 
TarasBY :
Vitya, 여기에서 아무 것도 이해할 필요가 없습니다. 사람은 한 "샌드박스"(해당 라이브러리가 있는 EA)의 전역 변수가 다른 "샌드박스"(컴파일된 라이브러리)에서 표시되기를 원합니다. :)))

이고르, 조금 틀렸어! "샌드박스"(컴파일된 라이브러리)에는 함수만 있고 모든 변수는 포함에 선언되어 있습니다. 그리고 인클루드 파일(인클루드 파일)에 선언된 변수는 인클루드를 올빼미에 직접 삽입했기 때문에 올빼미에서도 볼 수 있어야 합니다. 동의하지 않습니까?
 
Vitek2010 :

친애하는, 나는 당신이 비난하지 말고 단순히 돕고 제안하기를 바랍니다. 나는 멋진 프로는 아니지만 코드 수집가입니다.그래서 표시기를 조립했습니다.

그것은 한 주 동안 포인트의 합계와 합계의 역학을 보여줍니다. 더 작은 시간 프레임에서 Close[i+2]에서 Close[i+1]까지의 이전 이동을 계속하면 현재 이동 Close[i]는 다음과 같습니다. 플러스, 반대하면 마이너스입니다. 주의 시작은 처음부터 시작을 제공합니다. 다시 그려지지 않습니다. 프로그램이 금요일의 마감을 볼 수 있도록 개념 대신에 어떻게든 규정할 필요가 있습니다 - 이것은 DayOfWeek와 숫자 5(금요일의 숫자)를 사용하여 수행할 수 있다는 것을 이해하지만 이것이 어떻게 될 수 있습니까? 실질적으로? 돕다.


그렇게 할 것인가?

 //+------------------------------------------------------------------+
//|                                                    Vitek2010.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link        "vinin@mail.ru"
#property version    "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
  {
   SetIndexStyle ( 0 , DRAW_HISTOGRAM , EMPTY , 2 );
   SetIndexBuffer ( 0 ,Buffer);
   return ( 0 );
  }
// -------------------------------------------------------------------

int deinit()
  {
   return ( 0 );
  }
//--------------------------------------------------------------------

int start()
  {
   int StartBar= Bars - IndicatorCounted ()- 1 ;
   if (StartBar> 1 ) StartBar--;
   
   for ( int i=StartBar; i>= 0 ; i--)
     {
      Buffer[i]=Buffer[i+ 1 ];
       int pos0= iBarShift ( NULL , PERIOD_W1 , Time [i]);
       int pos1= iBarShift ( NULL , PERIOD_W1 , Time [i+ 1 ]);
       if (pos0==pos1) 
         Buffer[i]+= MathAbs ( Close [i]- Close [i+ 1 ]);
       else 
         Buffer[i]= MathAbs ( Close [i]- Close [i+ 1 ]);
     }
   return ( 0 );
  }
//--------------------------------------------------------------------
 
hoz :

이고르, 조금 틀렸어! "샌드박스"(컴파일된 라이브러리)에는 함수만 있고 모든 변수는 포함에 선언되어 있습니다. 그리고 인클루드 파일(인클루드 파일)에 선언된 변수는 인클루드를 올빼미에 직접 삽입했기 때문에 올빼미에서도 볼 수 있어야 합니다. 동의하지 않습니까?
그리고 컴파일된 라이브러리에 대한 언급은 무엇입니까?
 
Vinin :


그렇게 할 것인가?

아니, 그렇지 않습니다. 나는 설명할 것이다 - 당신의 포럼은 프로거의 마지막 글을 읽을 수 있는 요새에 대한 희망과 같습니다. 크기 삽입 - 이것이 바로 이 철자가 보는 방식입니다. PERIOD_W1 이지만 크기를 사용하거나 날짜 형식으로 고정된 기준점을 사용하면 원하는 효과가 없습니다. 그래서 특정 개념을 삽입하는 것에 대한 특정 질문을 작성했습니다 - 금요일 - 그런데 코드가 컴파일되지 않고 '버전' - 알 수 없는 속성( "버전" - 알 수 없는 속성)이라고 표시되어 있으므로 방법을 모르는 경우 DayOfWeek와 숫자 5(금요일 숫자)를 삽입 하려면 다른 옵션을 제공한 코드가 도움이 되지 않습니다.
 
Vitek2010 :
아니, 그렇지 않습니다. 나는 설명할 것이다 - 당신의 포럼은 프로거의 마지막 글을 읽을 수 있는 요새에 대한 희망과 같다. 크기 삽입 - 이것이 바로 이 철자가 보는 방식입니다. PERIOD_W1이지만 크기를 사용하거나 날짜 형식으로 고정된 기준점을 사용하면 원하는 효과가 없습니다. 그래서 특정 개념을 삽입하는 것에 대한 특정 질문을 작성했습니다 - 금요일 - 그런데 코드가 컴파일되지 않고 '버전' - 알 수 없는 속성( "버전" - 알 수 없는 속성)이라고 표시되어 있으므로 방법을 모르는 경우 DayOfWeek와 숫자 5(금요일 숫자)를 삽입 하려면 다른 옵션을 제공한 코드가 도움이 되지 않습니다.

TimeDayOfWeek ( Time [i]) 는 Time[i] 를 전혀 지정하지 않고 D'2014.01.27' 형식의 특정 날짜를 지정합니다.

그리고 오늘이 무슨 요일인지 확인해야 하는 경우 DayOfWeek ()를 호출하기만 하면 됩니다.

 
evillive :

TimeDayOfWeek ( Time [i]) 는 Time[i] 를 전혀 지정하지 않고 D'2014.01.27' 형식의 특정 날짜를 지정합니다.

그리고 오늘이 무슨 요일인지 확인해야 하는 경우 DayOfWeek ()를 호출하기만 하면 됩니다.

그리고 TimeDayOfWeek () (예제에서)에 대해 이것을 어디에서 읽었습니까 ??? :)))