[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 589

 

스크립트는 고문과 구별할 수 없습니다.

때때로 #property show_inputs는 어드바이저에서와 같이 매개변수가 있는 대화 상자를 표시하기 위해 스크립트에서 사용되지만(물론 거기에 있습니다) 구별하기 어렵습니다.

 

알고리즘을 알려주세요.. 낮은 시간에서 높은 시간과 낮은 시간을 찾는 것이 필요합니다.

   double H=iHigh( NULL ,TF2,i);
   double L=iLow( NULL ,TF2,i);  
   datetime timeH=
   datetime timeL=
 
zfs :

알고리즘을 알려주세요.. 낮은 시간에서 높은 시간과 낮은 시간을 찾는 것이 필요합니다.

i - 발견 색인을 기억하거나 즉시 사용하십시오.

그리고 iTime (NULL, TF2, i) - 시간이 있을 것입니다.

 
Craft :

아침까지 지속되지 않았습니다. 조금 나아지긴 했지만 주문으로 화단이 있는 곳은 피할 수 없었다. 필요한 조건에서 단일 주문을 등록하려면 어떻게 해야 합니까? 당신은 언급했습니다: 아니오, 그것은 작동하지 않습니다. 주문 이력 분석을 통해서만 가능합니다. 이것이 어떻게 가능하거나 다른 무엇을 적용할 수 있습니까?

이 정도

 int i,orders_total=OrdersTotal();

bool order_on_last_bar= false ;

if (orders_total> 0 ) //если есть ордера
{
   for (i=orders_total- 1 ;i>= 0 ;i--) //перебираем их все
   {
      OrderSelect(i,SELECT_BY_POS);
       if (iBarShift(OrderOpenTime())== 0 ) //если номер бара, соответствующего сремени открытия, равен 0
         order_on_last_bar= true ; //фиксируем этот факт
   }
}

if (order_on_last_bar== false ) // на нулевом баре нет открытых ордеров
{
   //делаем то что нам нужно
}
 

나는 이미 한 번 묻고 득점했지만 이제 다시 그런 기능, 포즈를 여는 최대 볼륨 계산이 필요했습니다. 나는 다음과 같이 씁니다.

 // Расчет максимального объема
   for ( double m = 0.1 ; AccountFreeMarginCheck( Symbol (),OP_SELL,m)> 30 ; m = m + 0.1 )
      {
       Max_lots   = m;
       double Ost = AccountFreeMarginCheck( Symbol (),OP_SELL,m);
      }

그러나 Max_lots는 항상 0과 같습니다... 누군가가 그러한 칩을 계산하기 위한 보다 유능한 설계를 알고 있습니까?

 
alsu :

다소 이런식으로

iBarShift 함수의 모든 값을 채웠습니다 (이전에 컴파일은 맹세했습니다). int i는 이미 위에서 선언되었고, 이 반복을 시도하고 제거하고 실험의 순수성을 위해 j로 대체했지만 작동하지 않습니다. - 일부 바에서는 여러 개/닫기 주문을 받습니다. 아래는 여는 조건이 있는 코드입니다. 어쩌면 제가 뭔가를 망쳤을 수도 있습니다. 다른 무엇을 할 수 있습니까?

   int j,orders_total= OrdersTotal ();

bool order_on_last_bar=false;

if (orders_total> 0 ) //если есть ордера
{
   for (j=orders_total- 1 ;j>= 0 ;j--) //перебираем их все
   {
       OrderSelect (j,SELECT_BY_POS);
       if (iBarShift( NULL , 0 ,OrderOpenTime())== 0 ) //если номер бара, соответствующего времени открытия, равен 0
         order_on_last_bar=true; //фиксируем этот факт
   }
}

if (order_on_last_bar==false) // на нулевом баре нет открытых ордеров
{
while (true)                                   // Цикл закрытия орд.
     {
       if (Total== 0 && Opn_B==true)               // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                         // Обновление данных
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_BUY,Lts,Ask, 2 , 0 , 0 ); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       if (Total== 0 && Opn_S==true)               // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                         // Обновление данных
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_SELL,Lts,Bid, 2 , 0 , 0 ); //Открытие Sel
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Sell " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }
  }
 
Craft :

iBarShift 함수의 모든 값을 채웠습니다(이전에 컴파일은 맹세했습니다). int i는 이미 위에서 선언되었고, 이 반복을 시도하고 제거하고 실험의 순수성을 위해 j로 대체했지만 작동하지 않습니다. - 일부 바에서는 여러 개/닫기 주문을 받습니다. 아래는 여는 조건이 있는 코드입니다. 제가 뭔가를 망쳤을 수도 있습니다. 다른 무엇을 할 수 있습니까?

1. Total 변수는 무엇이며 어디에 값이 할당됩니까?

2. 두 번째 if(Total==0 전에 else if(

 
alsu :

1. Total 변수는 무엇이며 어디에 값이 할당됩니까?

Simple Expert Advisor 기사의 예를 기반으로 합니다. https://book.mql4.com/ru/samples/expert

 int start()
  {
   int
   Total,                           // Количество ордеров в окне 
...
   // Учёт ордеров
   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> 1 )                           // Не более одного орд
           {
             Alert ( "Несколько рыночных ордеров. Эксперт не работает." );
             return ;                             // Выход из start()
           }
         Ticket=OrderTicket();                   // Номер выбранн. орд.
         Tip   =OrderType();                     // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                 // SL выбранного орд.
         TP    =OrderTakeProfit();               // TP выбранного орд.
         Lot   =OrderLots();                     // Количество лотов
        }
     }
 

alsu :

2. 두 번째 if(Total==0 전에 else if(

도움이되지 않았습니다. alsu , 을 거슬리게 해서 죄송합니다. 하지만 (문제를 끝내기 위해) 정말 해결하고 싶습니다.
 
Craft :
도움이되지 않았습니다. alsu , 을 거슬리게 해서 죄송합니다. 하지만 (문제를 끝내기 위해) 정말 해결하고 싶습니다.

괜찮아요.

간단한 EA의 /* */ 코드를 주석 처리하고 Total을 우리가 선언한 변수인 orders_total 로 바꾸십시오.