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

 

좋은 저녁이에요. 조언자의 도움을 부탁드립니다. 명확성을 위해 그림에 모든 것을 묘사하려고했습니다. NEXT 막대의 가격이 "Dodge"의 최대값보다 높을 때 ''Dodge''가 형성된다고 가정해 보겠습니다. - I buy, T/P, 내가 15포인트를 가져갔고 같은 막대의 가격이 간다고 가정해 보겠습니다. up 및 T/P 15 포인트의 주문(Buy_2)이 다시 열리지 만 Dodge 이후 첫 번째 막대에서 이 두 번째 오프닝 (Buy_2) 이 필요하지 않습니다. 이 오해를 제거하는 방법???

 
iMAG :

친애하는 전문가와 단순히 지식이 풍부합니다!

나는 절합니다 - BB 표시기가 내가 이해할 수 없는 신호를 보냅니다("빨간색-녹색-빨간색"이 아닙니다!). 더 정확하게 말하면 다음과 같이 호출합니다.

bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
굵게 = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + 굵게) / 2;
Print("밴드 상단 = ", bolup);
Print("아래 밴드 = ", 굵게);
Print("밴드 미디어 = ", bolmd);

결과적으로 3개의 변수 모두 동일한 값을 제공합니다. >8-O

한 쌍의 유로, TF - H1. 어떤 아이디어???

미리 감사드립니다...

여전히 편차를 음수로 설정하시겠습니까?
 
Fantar :

명확성을 위해 그림에 있는 모든 것을 묘사하려고 했습니다.

이제 mq4에서만 동일한 것을 그려보십시오. 명확하지 않은 경우 질문에 대한 스레드가 있습니다. 그리고 처음부터 어드바이저를 만들기 위해 Job Service가 있습니다.
 
iMAG :

친애하는 전문가와 단순히 지식이 풍부합니다!

나는 절합니다 - BB 표시기가 내가 이해할 수 없는 신호를 보냅니다("빨간색-녹색-빨간색"이 아닙니다!). 더 정확하게 말하면 다음과 같이 호출합니다.

bolup = iBands(Symbol(), 0, 24, 0 , 2, 0, 1, 1);
굵게 = iBands(Symbol(), 0, 24, 0 , 2, 0, 2, 1);
bolmd = (bolup + 굵게) / 2;
Print("밴드 상단 = ", bolup);
Print("아래 밴드 = ", 굵게);
Print("밴드 미디어 = ", bolmd);

결과적으로 3개의 변수 모두 동일한 값을 제공합니다. >8-O

한 쌍의 유로, TF - H1. 어떤 아이디어???

미리 감사드립니다...

설정한 주선 과의 편차는 0 (영)입니다. 우리는 0 이상이 필요합니다.
 

전략의 본질: 확률적 신호(5,14,3)에 진입하고 다른 기간(5,3,3)이 있는 확률론적 신호에서도 종료합니다. 그래서 역 신호가 아닌 스토캐스틱에서 출구를 만드는 방법을 이해할 수 없습니다.
문제가 있고 해결 방법을 모르겠습니다. 설명하려고 합니다.
그래서 내가 게시 한 코드에는 2 가지 기능이 있습니다.
 //+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose( int signal, bool Revers, int & ticketsClose[][ 2 ], double & lots[], double arrayTickets[][ 9 ])
{
int size= ArrayRange (arrayTickets, 0 );
//----
if (size== 0 ) return ;

int i,type,ticket,closeSize;
for (i= 0 ;i<size;i++)
{
type=arrayTickets[i][ 1 ];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue ;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue ;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue ;
}

closeSize= ArrayRange (ticketsClose, 0 );
ArrayResize (ticketsClose,closeSize+ 1 );
ArrayResize (lots,closeSize+ 1 );
ticketsClose[closeSize][ 0 ] = arrayTickets[i][ 0 ]; // # тикета
ticketsClose[closeSize][ 1 ] = arrayTickets[i][ 1 ]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][ 2 ]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return ;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders( int ticketsArray[][ 2 ], double lotsArray[])
{
//----
int i,size= ArrayRange (ticketsArray, 0 );
if (size== 0 ) return ;

int ticket,type;
double lots;
bool res;

int total= OrdersTotal ();

for (i= 0 ;i<size;i++)
{
ticket = ticketsArray[i][ 0 ];
type = ticketsArray[i][ 1 ];
lots = lotsArray[i];
RefreshRates (); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose (ticket,lots,Bid,Slippage, Orange );
if (!res)
{
Print ( "Не удалось закрыть ордер в покупку #" ,ticket, "! Ошибка №" , GetLastError ());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose (ticket,lots,Ask,Slippage, Orange );
if (!res)
{
Print ( "Не удалось закрыть ордер в продажу #" ,ticket, "! Ошибка №" , GetLastError ());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return ;
}
void PrepareTicketsToClose(int signal, bool Revers, int & ticketClose[][2], double & lott[],double arrayTickets[][9]) 함수에서 주문을 떠나기로 결정한 후 조건을 설정해야 합니다. 닫거나...
조건설정을 해봤는데 안되네요...
아마도 누군가가 살펴보고 이러한 기능에 오류가 있거나 내가 망쳤는지 보여줄 것입니다 ....
파일:
 
OrderSend 명령을 사용하여 연속으로 두 번 주문하면 그 사이에 IsTradeAllowed 상태 확인 기능을 넣어야 합니까?

또는 필요하지 않으며 주문이 성공적으로 완료된 후에만 EA가 첫 번째 OrderSend 호출 에서 두 번째 호출로 이동합니까?

IsTradeAllowed가 여전히 설정되어야 하는 경우 while 루프에서 어떤 시간 지연을 설정해야 합니까?
 
Desead :
OrderSend 명령을 사용하여 연속으로 두 번 주문하면 그 사이에 IsTradeAllowed 상태 확인 기능을 넣어야 합니까?

또는 필요하지 않으며 주문이 성공적으로 완료된 후에만 EA가 첫 번째 OrderSend 호출에서 두 번째 호출로 이동합니까?

테스터에서는 필요하지 않지만 데모나 실제 테스터에서는 바쁜 거래 흐름에 대한 메시지를 받게 됩니다.

죽은자 :


IsTradeAllowed가 여전히 설정되어야 하는 경우 while 루프에서 어떤 시간 지연을 설정해야 합니까?
서버마다 다른 실행 속도에 따라 다릅니다. 루프에 IsStopped ()에 대한 검사를 추가하는 것을 잊지 마십시오. 그렇지 않으면 운이 좋지 않을 것입니다.
 
안녕하세요! 자세한 따옴표(틱 또는 분) 아카이브를 어디에서 다운로드할 수 있는지 알려주십시오. MT 4(고양이가 울었다)의 인용문 아카이브에 있는 데이터는 단 5일 동안만 테스트했다.
 

안녕하세요. 시스템에는 BUY 및 SELL에 대한 세 가지 진입점이 있습니다. 그러나 신호가 들어오면 신호가 존재하는 한 매 틱마다 포지션이 열립니다. 어딘가에 플래그에 버그가 있습니다. 이해를 도와주세요.

   static bool buy_h= true , buy_l= true , buy_50= true ,
               sell_h= true , sell_l= true , sell_50= true ;

 if (LSMA_Sig== 0 ) // up-trend
    {
       if (Stoch_Sig== 4 && buy_l== true )
       { 
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask, 40 ,sl, 0 , "LSMA+Stoch" ,Magic);
         if (Ans== false )
           Alert( "Неудачная попытка открыть ордер BUY. Ошибка: " , GetLastError());
         if (Ans== true )
            buy_l= false ; // снимем флаг
       }
       //---
       if (Stoch_Sig== 0 && buy_50== true )
       {
         sl=Ask-Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask, 40 ,sl, 0 , "LSMA+Stoch" ,Magic);
         if (Ans== false )
           Alert( "Неудачная попытка открыть ордер BUY. Ошибка: " , GetLastError());
         if (Ans== true )
            buy_50= false ;        
       }
       //---
       if (Stoch_Sig== 2 && buy_h== true )
       {
         sl=Ask-Stop_Loss*Point;       
         Ans=OrderSend(Symb,OP_BUY,Lots,Ask, 40 ,sl, 0 , "LSMA+Stoch" ,Magic);
         if (Ans== false )
           Alert( "Неудачная попытка открыть ордер BUY. Ошибка: " , GetLastError());
         if (Ans== true )
            buy_h= false ;         
       }   
    }
   if (LSMA_Sig== 1 ) // dn-trend
    {
       if (Stoch_Sig== 3 && sell_h== true )
       {
         sl=Bid+Stop_Loss*Point;
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid, 40 ,sl, 0 , "LSMA+Stoch" ,Magic);
         if (Ans== false )
            Alert( "Неудачная попытка открыть ордер SELL. Ошибка: " , GetLastError());
         if (Ans== true )
            sell_h= false ;
       }
     //---
     if (Stoch_Sig== 1 && sell_50== true )
      {
         sl=Bid+Stop_Loss*Point;      
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid, 40 ,sl, 0 , "LSMA+Stoch" ,Magic);
         if (Ans== false )
            Alert( "Неудачная попытка открыть ордер SELL. Ошибка: " , GetLastError());
         if (Ans== true )
            sell_50= false ;         
      }
     //---
     if (Stoch_Sig== 5 && sell_l== true )
      {
         sl=Bid+Stop_Loss*Point;      
         Ans=OrderSend(Symb,OP_SELL,Lots,Bid, 40 ,sl, 0 , "LSMA+Stoch" ,Magic);
         if (Ans== false )
            Alert( "Неудачная попытка открыть ордер SELL. Ошибка: " , GetLastError());
         if (Ans== true )
            sell_l= false ;        
      }
    }
    
   if (Stoch_Sig!= 4 && buy_l== false ) // поднимем флаг
       buy_l= true ;
   if (Stoch_Sig!= 0 && buy_50== false )
       buy_50= true ;
   if (Stoch_Sig!= 2 && buy_h== false )
       buy_h= true ;
   if (Stoch_Sig!= 3 && sell_h== false )
       sell_h= true ;
   if (Stoch_Sig!= 1 && sell_50== false )
       sell_50= true ;
   if (Stoch_Sig!= 5 && sell_l== false )
       sell_l= true ;  
 
silhouette :

안녕하세요. 시스템에는 BUY 및 SELL에 대한 세 가지 진입점이 있습니다. 그러나 신호가 들어오면 신호가 존재하는 한 매 틱마다 포지션이 열립니다. 어딘가에 플래그에 버그가 있습니다. 이해를 도와주세요.

OrdersTotal ()은 이미 열려 있는 위치의 수를 반환합니다. 도움을 받아 이미 열린 포지션이 있는지 여부를 확인할 수 있습니다.