MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1662

 
Taras Slobodyanik # :

왜 3가지 방법이 필요한가요?
하나로 모든 것을 할 수 있을 만큼

  • 주문을 확인했다

- 수정
- 수정되지 않음

흥미로운!

Taras, TP와 SL에 3개의 구매 주문이 있고 SL이 하나의 주문으로 변경되었다고 가정해 보겠습니다.

질문: 수정된 주문을 어떻게 찾을 수 있습니까?

 
Taras Slobodyanik # :

왜 3가지 방법이 필요한가요?
하나로 모든 것을 할 수 있을 만큼

  • 주문을 확인했다

- 수정
- 수정되지 않음

이미 둘, 하나는 수정된 주문의 티켓이 저장되는 OrdersTotal()을 통해 배열의 크기를 제어하고 다른 하나는 이 배열이 티켓의 주제에 대해 정렬됩니다. 그러나 지금은 이 모든 것과 전혀 관련이 없는 다른 위치에서 코드를 변경했으며 어떤 이유로 오류(배열 범위를 벗어남)가 발생했습니다.
 
MakarFX # :

흥미로운!

Taras, TP와 SL에 3개의 구매 주문이 있고 SL이 하나의 주문으로 변경되었다고 가정해 보겠습니다.

질문: 변경된 주문을 어떻게 찾을 수 있습니까?

분명히 zhezh, sl(또는 tp)이 이유가 있어서 바뀌었겠죠?
그리고 몇 가지 조건에 따라.

즉, 다음 확인에서 이 조건은 "이행됨"으로 결정됩니다. 주문은 이미 수정되었습니다.


추신. 수동 변경에 대해 이야기하는 경우 EA에 대한 지식 없이 그곳에 있는 누군가가 무언가를 변경할 것입니다. 그러면 당연히 구조의 배열을 수집하고 이를 시장 주문과 지속적으로 비교해야 합니다.

 
Taras Slobodyanik # :

왜 3가지 방법이 필요한가요?
하나로 모든 것을 할 수 있을 만큼

  • 주문을 확인했다

- 수정
- 수정되지 않음

순서가 1이 아니라 10개라고 하면 수정된 각 티켓의 티켓을 배열에 씁니다. 그러나 현재로서는 이것이 문제입니다.
 
MakarFX # :

제거됨

MakarFX 감사합니다! 이제이 첫 번째 주문은 신호 없이는 불필요하지만 지금은 첫 번째 신호 순서(정상)에서 어떤 이유로 인해 2개의 촛불이 더 일찍 시작됩니다))) 그런 다음 모든 것이 정상이며 다른 주문에서는 올바른 순간에 입력됩니다. ) 테스터에서 메시지까지 화면을 첨부했는데 이 1차 주문에도 불구하고 가장 중요한건 다 되었네요 다시한번 정말 감사합니다) 마술사들과 이해를 하고 나서 외부변수를 만들어서 첨부할 때 전문가는 통화 쌍의 특정 차트에 대해 각 쌍의 숫자를 개별적으로 변경합니다.

 
Nerd Trader # :
순서가 1이 아니라 10개라고 하면 수정된 각 티켓의 티켓을 배열에 씁니다. 그러나 현재로서는 이것이 문제입니다.

주문 수는 중요하지 않습니다. 조건에 따라 TP/SL을 변경할 필요가 없는 경우 = 주문이 이미 수정되었습니다.

 
SanAlex # :

테스터에서 재미를 위해 좋은 것입니다.

그리고 이것은 당신을 위한 선물로 돈을 벌기 위한 것입니다.

\\\\\\\\\\\\\\\\\\\\\\\\\\

검증을 위해 출시됨 - 저녁에 작동 방식을 확인할 것입니다.

\\\\\\\\\\\\\\\\\\\\\\\\\\

모든 차트에서 템플릿이 어떻게 변경되는지 확인했습니다. 모든 것이 작동했습니다! 전체 이익은 어떻게 목표에 도달했습니까?


SanAlex , 매우 흥미롭습니다. 이 전문가를 자세히 고려할 것입니다. 감사합니다!

 

Ryabyata, 좋은 하루, 코드에 대해 알려주세요. 여기에 마이너스 구매의 두 거래 오른쪽에 있는 차트가 있습니다. 알고리즘에 따라 판매, 구매별 판매가 포함되며 구매를 입력해야 하지만 어떤 이유에서인지 빼기 거래를 보고 제공하는 이 두 함수는 역사상 가장 최근의 것입니다. 둘 다 플러스로 표시하십시오! 올바르게 작성하는 방법과 오류는 어디에 있습니까-이 TS는 평균적으로 반전입니다-간단히 빼기 판매 후 동일한 기능이 제대로 작동합니다-구매가 열려야하지만 열리지 않기 때문에 f-ii는 true를 제공하지만 bool Calc_Loss_BUY()는 false를 제공해야 합니다. 왜냐하면 f-s에서 가장 극단적인 거래가 수익성이 없는 경우 이 f-th는 TRUE를 제공하고 그렇지 않으면 FALSE를 제공하고 둘 다 TRUE를 제공한다고 생각하기 때문입니다. 결정을 도와주세요.



 // проверка предыдущего минусового селл
bool Calc_Loss_SELL()
  {
   bool ord;
   bool TotalLot= false ;
   HistorySelect ( TimeCurrent ()-HistoryDaysLoadI* 86400 , TimeCurrent ());
   for ( int i= HistoryDealsTotal ()- 1 ; i>= 0 ; i--)
     {
       ulong ticket= HistoryDealGetTicket (i);
      ord= HistoryDealSelect (ticket);
       if (ord && HistoryDealGetString (ticket, DEAL_SYMBOL ) == _Symbol
         && HistoryDealGetInteger (ticket, DEAL_MAGIC ) == MagicC
         && HistoryDealGetInteger (ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger (ticket, DEAL_TYPE ) ==   DEAL_TYPE_BUY )
        {
         if ( HistoryDealGetDouble (ticket, DEAL_PROFIT ) < 0 )
           {
            TotalLot= true ;
             if (УСРЕДНЯЛКА) Print ( " усреднение в селл разрешено " ,TotalLot);
             else    Print ( " ПЕРЕВОРОТ В БАЙ разрешен " ,TotalLot);
             break ;
           }
         else
           {
             break ;
           }
        }
     }
   return (TotalLot);
  }


// проверка предыдущего минусового бай
bool Calc_Loss_BUY()
  {
   bool ord;
   bool TotalLot= false ;
   HistorySelect ( TimeCurrent ()-HistoryDaysLoadI* 86400 , TimeCurrent ());
   for ( int i= HistoryDealsTotal ()- 1 ; i>= 0 ; i--)
     {
       ulong ticket= HistoryDealGetTicket (i);
      ord= HistoryDealSelect (ticket);
       if (ord && HistoryDealGetString (ticket, DEAL_SYMBOL ) == _Symbol
         && HistoryDealGetInteger (ticket, DEAL_MAGIC ) == MagicC
         && HistoryDealGetInteger (ticket, DEAL_ENTRY ) == DEAL_ENTRY_OUT
         && HistoryDealGetInteger (ticket, DEAL_TYPE ) == DEAL_TYPE_SELL )
        {
         if ( HistoryDealGetDouble (ticket, DEAL_PROFIT ) < 0 )
           {
            TotalLot= true ;
             if (УСРЕДНЯЛКА) Print ( " усреднение в бай разрешено " ,TotalLot);
             else    Print ( " ПЕРЕВОРОТ В СЕЛЛ разрешен " , TotalLot);
             break ;          
           }
         else
           {
             break ;
           }
        }
     }
   return (TotalLot);
  }


     //----------------------------------------------
       // проверка условий ПЕРЕВОРОТА В СЕЛЛ
       // нет поз рыночных и предыдущая сделка В БАЙ была минусовая и не было минусового селла
       Print ( " Calc_Loss_BUY(): " ,Calc_Loss_BUY(), " Calc_Loss_SELL(): " ,Calc_Loss_SELL());
      
       if (! PositionSelect ( Symbol ()) && Calc_Loss_BUY() && !Calc_Loss_SELL())
        {
         m_trade.Sell(CalcLot(), _Symbol ,LastTick.bid,LastTick.ask+ double (SLE)* _Point ,LastTick.bid- double (TPE)* _Point - _Spread* _Point );
         Print ( " ПЕРЕВОРОТ БАЯ В СЕЛЛ, Calc_Loss_BUY(): " ,Calc_Loss_BUY());
        }

 
       // проверка условий ПЕРЕВОРОТА в SELL
       // нет поз рыночных и предыдущий селл был минусовой И НЕ БЫЛО МИНУСОВОГО БАЙ
      
       if (! PositionSelect ( Symbol ()) && Calc_Loss_SELL() && !Calc_Loss_BUY())
        {
         m_trade.Buy(CalcLot(), _Symbol ,LastTick.ask,LastTick.bid- double (SLE)* _Point ,LastTick.ask+ double (TPE)* _Point + _Spread* _Point );
         Print ( " ПЕРЕВОРОТ СЕЛЛА В БАЙ, Calc_Loss_SELL(): " ,Calc_Loss_SELL());
        }

일반적으로 그는 매수를 열지 않지만 부츠 매도 후에 열어야 합니다!!!!!!!!!


사실, 작업은 매수 또는 매도 거래가 된 EXTREME 포지션이 마감된 손익을 결정하고 유형별로 더 살펴봅니다!

돕다! 부탁해!

 

안녕하세요!

전체 주문 그리드를 계산하는 기능과 주문을 마감하는 기능의 두 가지 기능이 있습니다.

 //+------------------------------------------------------------------+
double CalculiteProfit()
{
     double oProfit = 0 ;
     for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
    {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
        {
           if (OrderType() == OP_BUY || OrderType() == OP_SELL)
          {
            oProfit += OrderProfit();
          }
        }
      }
    }
     return (oProfit);
}
//+------------------------------------------------------------------+
 double FindLastBuyPrice()
{
   int oldticket, ticket = 0 ;
   double oldopenprice = 0 ;
   
   for ( int cnt = OrdersTotal ()- 1 ; cnt>= 0 ; cnt--)
   {
     if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES))
     {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic && OrderType() == OP_BUY)
        {
          oldticket = OrderTicket();
           if (oldticket > ticket)
          {
            ticket = oldticket;
            oldopenprice = OrderOpenPrice();
          } 
        }
     }
   }
   return (oldopenprice);
 }
//+------------------------------------------------------------------+

아직 주문 마감 조건이 있습니다.

 double op = CalculiteProfit(); 
     if (op >= Profit)
     {
       ClosseAll();
     }

이익 - 예금 통화 설정에서

이 모든 것의 의미: 주문 그리드의 계산이 0과 예금 통화 의 이익을 더한 값과 같으면 전체 주문 그리드가 닫힙니다.

Profit 대신 포인트가 있도록 코드를 변경하도록 도와주세요. 고맙습니다.

 
Taras Slobodyanik # :

분명히 zhezh, sl(또는 tp)이 이유가 있어서 바뀌었겠죠?
그리고 몇 가지 조건에 따라.

즉, 다음 검사에서 이 조건은 "이행됨"으로 결정됩니다. 즉, 주문이 수정되었습니다.


추신. 수동 변경에 대해 이야기하는 경우 EA에 대한 지식 없이 그곳에 있는 누군가가 무언가를 변경할 것입니다. 그러면 당연히 구조의 배열을 수집하고 이를 시장 주문과 지속적으로 비교해야 합니다.

이미 잊어버렸습니다... 하지만 처음에는 그렇게 했습니다(내가 커밋한 것이 좋습니다). 하지만 조건의 메서드가 신뢰할 수 없는 것처럼 보였고 변경된 순서를 나타내기 위해 더 명시적인 무언가를 원했습니다.