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

 
hoz :


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

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


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

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

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

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


 

안녕하세요!

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 );
      }
   }
}

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

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

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