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

 
Reshetov :

테스터와 차트에서 파일은 다른 디렉토리에서 작성되고 읽힙니다.

  1. MetaTrader 4\테스터\전문가\파일
  2. MetaTrader 4\experts\files

유리님, 존경합니다! 이제 이해하고 수정했습니다.

쥰코, 고마워. 이 작업을 시도했지만 문자열 파일에서 바이너리 데이터를 읽을 수 없거나 이와 유사한 오류가 발생했습니다. 어쨌든 내 디자인은 효과가 있습니다.

 
snail09_1 :

IMHO, 마감을 위한 티켓 배열 을 만들지 않았지만 시장 주문 루프에서 각 주문을 확인하고 가능한 조건을 확인하여 마감 기능의 입력에 티켓을 제출했습니다.

코드로 보여줄 수 있나요???

즉, 이것을 어떻게 구현할 수 있습니까?

 

모두에게 좋은 하루!

아마도 질문은 초보자를 위한 것이 아니지만 질문할 수 있는 다른 스레드를 찾지 못했습니다.

차트에 잔액 대신 자본이 표시되도록 MetaTrader 4에서 자세한 보고서를 다운로드하려면 어떻게 해야 합니까? 또는 MT4에서 언로드하지 않지만 다른 편리한 방법으로 이 작업을 수행할 수 있습니까? Ato는 올빼미와 거래되며 균형을 보는 데 의미가 없습니다. 가장 중요한 것은 감소가 제공하는 것입니다.

매우 감사합니다!!

 
belous :

코드로 보여줄 수 있나요???

즉, 이것을 어떻게 구현할 수 있습니까?

뭐, 이런

 int ticket;

for ( int z= OrdersTotal ()- 1 ;z>= 0 ;z--)
   {
   if (! OrderSelect (z,SELECT_BY_POS))
      {
      _GetLastError= GetLastError ();
       Print ( " OrderSelect(" ,z, ",SELECT_BY_POS)-Error #" ,_GetLastError);
       continue ;
      }
   if ( OrderMagicNumber ()==magic && OrderSymbol ()== Symbol ())
      {
       if (( OrderType ()==OP_BUY)||( OrderType ()==OP_SELL))
          {
           // Проверим условие для закрытия, и если истинно          
              {
              ticket= OrderTicket ();
               //Закрываем его
              }
           }
       }
    }
 

도와주세요.

여기 코드가 있습니다


 //-----------------Закрытие по истории в безубыток--------------------
   //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0 ; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0 ;   // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0 ,
Time_at_History_Previos = 0 ;     
 
 if ( OrdersHistoryTotal () != 0 )
   {
     for ( int counter = OrdersHistoryTotal ()- 1 ; counter >= 0 ; counter--)
      {
       OrderSelect (counter, SELECT_BY_POS, MODE_HISTORY);
       if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
         {
           if ( OrderType () == OP_BUY || OrderType () == OP_SELL)
            {
             if ( OrderProfit () < 0 ) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if (Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                 //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                 if ( OrderProfit () >= 0 )
                   break ;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0 ) { // Имеем убыток по закрытым позам
double money = Lots;
   BuyLots = GetBuyLotsSum();
        SellLots = GetSellLotsSum();
         if (BuyLots  > SellLots)money = BuyLots * 10 ;
         if (BuyLots  < SellLots)money = SellLots * 10 ;
   if ((( AccountEquity () + Sum_Loss + (Sum_Loss / money)) >= AccountBalance ()) && (((totalSell > 0 ) && (totalBuy < 1 )) || ((totalSell < 1 ) && (totalBuy > 0 )))) { // Достигли безубытка
     // Здесь какой-то код, который необходимо выполнить при достижении безубытка
        CloseAllBuy();
           CloseAllSell();
           Sum_Loss = 0.0 ;
           

거래가 음수에서 마감되었을 때 사이클이 열리고 다음 주문이 0보다 크거나, 즉 양수 잔액이지만 음수보다 작으면 다음 주문이 닫히도록 아무 것도 할 수 없습니다. 더하기 음수, 우리는 이미 더 작은 새로운 음수 값을 얻습니다.

 if ( OrderProfit () >= 0 && Sum_Loss < 0.0 )
                   double lastLoss_two = OrderProfit ();
                 Sum_Loss=Sum_Loss+lastLoss_two;   // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime ();
               }

신호에서 음수보다 크면 주문을 닫고 처음부터 사이클을 시작합니다.


상황은 이 코드가 손실로 거래를 마감할 때 마이너스 잔액을 기억하고 플러스로 거래를 마감할 때 플러스가 잔액보다 작을 때 Sum_Loss를 재설정하고 필요한 재설정하는 것이 아니라 깎는 것입니다.

즉, 이제 다음과 같이 작동합니다.

마감된 주문을 확인하고, 마감된 주문의 이익이 0보다 작으면 이 이익이 Sum_Loss에 추가되고, 미결 거래의 이익이 Sum_Loss를 초과할 때까지 계속됩니다. 닫히고 Sum_Loss가 0으로 재설정되고 주기가 다시 시작됩니다.

그리고 나는 필요합니다:

빨간색으로 마감된 주문은 음수 이익이 Sum_Loss에 추가되었습니다. 다음 거래가 양수 이익으로 마감되면 Sum_Loss 금액을 수익성 있는 이익에서 받은 금액만큼 줄입니다. 더 적은 양으로 주문의 이익이 Sum_Loss보다 클 때까지 계속 진행한 다음 Sum_Loss를 재설정하고 새 주기를 시작합니다.

합계 손실 = 0;

첫 번째 청산 주문: 이익 (-50) < 0

Sum_Loss + 이익 (Sum_Loss + (-50))

Sum_Loss = -50;

두 번째 청산 주문: 이익(+40) > 0 및 Sum_Loss < 0

Sum_Loss + 이익 (Sum_Loss + 40)

합계_손실 = -10


어떻게 든 Sum_Loss 변수를 음수로 지정해야 할까요? 나는 일반적으로 혼란스럽다. 많은 옵션을 시도했지만 올바른 결과를 얻지 못했습니다. 적어도 올바른 방향으로 나를 안내하고, 무엇을, 어떻게 해야 하는지 알려주세요. 그렇지 않으면 이해할 수 없습니다.
 
스프레드를 고려하지 않고 고문을 테스트하는 방법은 무엇입니까? 그게 가능한가요?
 
Max79 :
스프레드를 고려하지 않고 고문을 테스트하는 방법은 무엇입니까? 그게 가능한가요?
예를 들어 여기 (set spread ? site:mql4.com) 를 Google에서 찾아보십시오. https://www.mql5.com/en/forum/102224/page2
 

누가 이 칠면조를 가지고 있습니까?

 

도와주세요, 제발.

Expert Advisor에 Pending order modifier를 넣었는데 Journal에서 테스트하면 오류 - 1이 나옵니다.

저것들. - "상수값이 함수 매개변수로 전달되면 이 경우 오류 1(ERR_NO_RSULT)이 생성됩니다."

수정전에 체크를 해두었지만 소용이 없습니다. 실수는 어디에 있습니까? EA는 테스트 중이지만 값이 변경되지 않은 주문을 제거하는 방법은 무엇입니까?

 
Run :

누가 이 칠면조를 가지고 있습니까?

이봐:

http://www.kimiv.ru/index.php?option=com_remository&Itemid=13&func=fileinfo&id=45