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

 
hoz :


어제는 급해서 떠나야 했습니다. 내가 원하는 것이 아니라 그 순간에 질문을 썼습니다.

사실, 나는 주어진 조건에서 한 팩의 주문(그리드)을 던지는 정확히 전문가를 의미했습니다. 그런 Expert Advisors에서 나는 스프레드, 스탑 레벨, 가격 위(Ask 또는 Bid 아래) 또는 어떤 것도 확인되지 않는 것을 본 적이 없습니다. 더. 바로 지금 제가 직접 본대로 쓰겠습니다, 일반법원에 올리겠습니다..


왜 불행한 전문가들을 예로 들까요? 최소한 테스터 전용이며 최대로 위에서 언급 한 것처럼 비뚤어진 손으로 작성됩니다 ...
 
alsu :

왜 불행한 전문가들을 예로 들까요? 최소한 테스터 전용이며, 최대로 위에서 언급한 것처럼 비뚤어진 손으로 작성됩니다 ...

글쎄, 나는 그것을 구현하는 방법을 이해했지만 다른 사람들이 어떻게하는지보기로 결정했습니다.
 

여러분, 제게 아주 심각한 문제가 있습니다! 그림을 저장할 때 차트가 왼쪽으로 이동하지 않습니다! "그래프 이동" 기능이 활성화되었습니다! 어떻게 고치는 지?


 

안녕하세요!

EA가 하루에 한 번 이상 거래를 열지 않기를 바랍니다. 방법을 알려주세요.

 

안녕하세요, 저는 최근에 mql4를 배우기 시작했습니다. 경험 많은 프로그래머가 도움을 줄 수 있습니다. 주문이 음수가 되는 즉시 잠그는 스크립트가 있으며 속성에서 설정할 수 있는 특정 수준(예: 주문이 -30 또는 -40에 도달할 때)에서 잠그는 방법이 있습니다.

무효 시작()
{
이중 손절매;
이중 로트=0;
for(int i=0;i<OrdersTotal();i++)
{
if(! OrderSelect (i,SELECT_BY_POS))
계속하다;
if(OrderSymbol()!=Symbol())
계속하다;
if(주문유형()==OP_BUY)
랏+=OrderLots();
if(주문 유형()==OP_SELL)
많은-=OrderLots();
}
if(많은>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red);
if(많은 <0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue);

 
protey7 :

안녕하세요!

EA가 하루에 한 번 이상 거래를 열지 않기를 바랍니다. 방법을 알려주세요.

 extern int MagicNumber= 555 ;
//---
if ( OrdersTotal ()> 0 ) // Есть ли отложенные ордера или открытые позиции
{   for (i= OrdersTotal ()- 1 ; i>= 0 ; i--) // Перебираем ордера
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
      {   if (OrderSymbol()!= Symbol ()) continue ; // Если торговый символ не тот, на котором работает эксперт - игнорируется
         if (OrderMagicNumber()!=MagicNumber) continue ; // Если магик номер не тот, что надо - игнорируется
         if (OrderOpenTime()>=iTime( NULL , PERIOD_D1 , 0 )) // Если время открытия ордера больше или равен началу открытия данной свечи,
                                                       // то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.
             return ( 0 );
}  }  }
 
Wild_Wolf :

여러분, 제게 아주 심각한 문제가 있습니다! 그림을 저장할 때 차트가 왼쪽으로 이동하지 않습니다! "그래프 이동" 기능이 활성화되었습니다! 어떻게 고치는 지?

참고: 오른쪽 상단의 차트에는 작은 삼각형이 있습니다. 그 위로 마우스를 가져가면 " 그래프 오프셋 " 이라는 툴팁이 나타납니다. 그것을 걸고 오른쪽에 공간을 확보하는 데 필요한만큼 왼쪽으로 밉니다.
 
hoz :

글쎄, 나는 그것을 구현하는 방법을 이해했지만 다른 사람들이 어떻게하는지보기로 결정했습니다.
다른 사람들이 창문에서 뛰어내리기 시작한다면?
 
paladin80 :


팁 고마워!

제안 된 버전에서만 전문가가 작동하지 않습니다.)))) 내가받은 작업 버전을 제안합니다.

if (OrdersTotal()==0) // 오픈 포지션 이 없는 경우

{ for (int i=OrdersHistoryTotal()-1; i>=0; i--) // 계정 내역 목록에서 주문을 반복합니다.

{ if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // 마감된 주문에서 주문이 선택됨

{

if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // 주문 마감 시간이 이 캔들의 시작 시점보다 크거나 같으면,

// 그러면 전문가가 작동하지 않습니다. PERIOD_D1 대신 다른 마침표를 삽입할 수 있습니다.

반환(-1);

} } }

 
alsu :

왜 불행한 전문가들을 예로 들까요? 최소한 테스터 전용이며 최대로 위에서 언급 한 것처럼 비뚤어진 손으로 작성됩니다 ...


제 방식대로 썼습니다. 저는 특별히 코드를 최적화하지 않았고, 로직을 보여주기 위해 무엇이 작동하는지 썼을 뿐입니다.

 //+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy( double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend ( Symbol (), OP_BUYSTOP, 0.1 , NormalizeDouble (Ask + (step*i) * pt, Digits ), 3 , 0 , 0 , NULL ,i_magic, 0 , CLR_NONE );
   
   if (ticket > 0 )
       return ( true );
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell( double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend ( Symbol (), OP_SELLSTOP, 0.1 , NormalizeDouble (Bid - (step*i)*pt, Digits ), 3 , 0 , 0 , NULL ,i_magic, 0 , CLR_NONE );
   
   if (ticket > 0 )
       return ( true );
}
//+-------------------------------------------------------------------------------------+
//| Посылаем пачку ордеров на сервер                                                    |
//+-------------------------------------------------------------------------------------+
bool SendPackOfOrders( int lastPosTicket, int lastPosType, double initialOOP)
{
   if (lastPosTicket == - 1 )                         // Если нет рыночных ордеров, значит..
       return ( false );                               //..сетку отложек не кидаем
       
   // if (lastPosType != g_lastPosType)               // Если тикет изменился, значит..
   {
      lastPosType = g_lastPosType;
      
       for ( int i= 1 ; i<= 5 ; i++)
      {
         if (!OpenBuy(initialOOP, i))
             return ( false );
         if (!OpenSell(initialOOP, i))
             return ( false );
      }
   }
}

여기 단계 - 주문 그리드를 배치하는 단계입니다.

제 질문은 이것입니다. 내 논리가 맞습니까? 어떻게 든 코드를 더 적절하게 최적화하여 더 빠르게 작동할 수 있습니까? 성능면에서..

또한 아이디어가 있습니다. 각 메시지 후에 일시 중지할 수 있습니까? 글쎄, 일반적으로 이러한 순간은 나에게 매우 흥미 롭습니다.

사유: