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

 
sss2019 :

내 터미널에서 어드바이저는 3개의 주문을 열고 어떤 시점에서 3개의 주문을 모두 닫아야 하지만 어떤 이유로 2개만 닫고 오류가 발생하지 않습니다.

거래를 성사시켜야 하는 부분입니다

문제가 무엇인지, 왜 두 개의 거래만 마감되었는지 이해가 되지 않습니다. 아는 사람 말해줘

 if (OrderSelect(i, SELECT_BY_POS) == false ) continue ;
 
Vinin :


주기를 다르게 하십시오


그것도 도움이 되지 않았지만. 주기를 재정렬하지 않고 계속을 대체하지 않는 것은 마치 고문이 자신의 3개 주문을 보지 않고 2개만 삭제하는 것처럼 도움이 되지 않았습니다.

 
루프 재계산 방향 변경
 
가져가서 사용하세요.
파일:
 
때로는 모든 것이 너무 이해할 수없고 전혀 논리적이지 않기 때문에 터미널 환경 자체에도 오류가있는 것 같습니다.
 
sss2019 :
때로는 모든 것이 너무 이해할 수없고 전혀 논리적이지 않기 때문에 터미널 환경 자체에도 오류가있는 것 같습니다.
덜 보이게하려면 교과서와 설명서를 공부하는 것부터 시작해야합니다. 그런 다음 포럼에서 유사한 질문에 대한 설명을 찾아보십시오.
 
sss2019 :

어드바이저의 최대 드로다운을 구성하는 것이 더 정확한 방법을 알려주십시오. 작동이 중지되는 지점에 도달하면 손실 금액을 누적할 정적 변수를 설정할 수 있습니까?

어드바이저가 작동을 중지해야 하지만 다시 시작하거나 매개변수를 변경한 후 다시 작동을 시작해야 합니다.


Expert Advisor를 초기화할 때 현재 잔액을 정적 변수 에 저장할 수 있습니다. 그리고 시작 기능에서 현재 잔고가 초기 잔고에서 몇 퍼센트나 빠졌는지 확인하고, 그 퍼센트가 허용치보다 크면 거래가 금지됩니다. 간단히 말해서 코드가 없습니다. 다시 시작한 후 Expert Advisor는 새로운 초기 잔액을 기억합니다...
 
MrSoros :

Expert Advisor를 초기화할 때 현재 잔액을 정적 변수에 저장할 수 있습니다. 그리고 시작 기능에서 현재 잔고가 초기 잔고에서 몇 퍼센트나 빠졌는지 확인하고, 그 퍼센트가 허용치보다 크면 거래가 금지됩니다. 간단히 말해서 코드가 없습니다. 다시 시작한 후 Expert Advisor는 새로운 초기 잔액을 기억합니다...

질문에 들어갔습니까?
 
MrSoros :

1. Expert Advisor 초기화 시 현재 잔액을 정적 변수에 저장할 수 있습니다. 그리고 시작 기능에서 현재 잔고가 초기 잔고에서 몇 퍼센트나 빠졌는지 확인하고, 그 퍼센트가 허용치보다 크면 거래가 금지됩니다. 간단히 말해서 코드가 없습니다.

2. 재시작 후 EA는 새로운 초기 잔액을 기억합니다...

1. 할 수 있습니다. 이 옵션(코드 포함)이 있습니다. 직접 변수를 초기화합니다.

 extern int MaxLoss = 90 ;           // Максимально допустимая просадка в процентах от баланса
int   orderIndex;
bool IsExpertFailed = false;
bool IsExpertStopped = false;
double lots;                       // вспомогательная переменная для расчета нового размера лота 
double Lots_New;                   // Количество лотов для новых ордеров
int ticket;                         // Номер ордера
double orderLots;                   // Lots   
double orderProfit;                 // Profit
double Price;                       // Цена открытия рыночного ордера
double SL;                         // Значение StopLoss ордера
double   TP;                         // Значение TakeProfit ордера
static datetime prevtime = 0 ;       // по ценам открытия
int start()
{  
   if (IsExpertStopped)
   {
       Comment ( "Не удалось инициализировать советник!" );
       return ( 0 );
   }
   
   if (IsExpertFailed)
   {
       Comment ( "Критическая ошибка! Советник остановлен." );
       return ( 0 );
   }
      Level_new= MarketInfo ( Symbol (),MODE_STOPLEVEL );    
 
   int orderCount = 0 ;  
       // ------------------------------------------------Учет ордеров только ЭТОГО ЭКСПА---------------------------

   int orderType;
   for (orderIndex = ( OrdersTotal () - 1 ); orderIndex >= 0 ; orderIndex--)
     {  
       if (! OrderSelect (orderIndex, SELECT_BY_POS))     continue ;
       if (( OrderSymbol () != Symbol ()) || ( OrderMagicNumber () != magic))     continue ;

      orderType = OrderType ();
       if ((orderType != OP_BUY) && (orderType != OP_SELL))     continue ;
          ticket = OrderTicket ( );                         // Номер ордера
          orderLots = OrderLots ();                         // Lots   
          orderProfit = OrderProfit () + OrderSwap ();       // Profit
          Price = OrderOpenPrice ();                         // Цена открытия рыночного ордера
          SL =   OrderStopLoss ();                           // Значение StopLoss ордера
          TP = OrderTakeProfit ();                           // Значение TakeProfit ордера
          
             if (ticket> 0 )                                               // Если позиция открылась
                    {
                             while ( OrderSelect (ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep ( 100 );
                                 }
                                   double OpenPrice= OrderOpenPrice ();
                    }
           // Проверка на предельную просадку      
       double loss = - ((orderProfit * 100.0 ) / AccountBalance ());
       if (loss > MaxLoss)
      {
         Print ( "MaxLoss" );
         CloseAllOrders(magic);
         IsExpertFailed = true;
         return ( 0 );
      }        
         
      orderCount++;                     // считаем ордера (не больше i)                   
     
    }   

2. 아니요. 처음으로 이 EXPA가 시작되기 전의 균형 수준을 기억하지 못할 것입니다. 변수의 현재 수준만 기억합니다.

 AccountBalance ()

.이 계정의 경우.

 

안녕하세요! 그 전에 Excel에서 따옴표를 올바르게 표시하는 것과 관련된 질문이 있었습니다. 이 값비싼 덕분에 이 질문에 답을 얻었 습니다 . 이제 질문이 있습니다. 여러 통화에 대해 데이터가 업로드되도록 MQL5 및 dll 없이 이 작업을 수행할 수 있습니까? "..."대신 해당 날짜 값, 종가 값 및 현재 기간이 아래에 개략도가 표시됩니다.

나는 질문에 대한 답이 내 코드에 대한 가능한 조정을 포함할 것이라고 가정합니다. 현재 핀인 파일에 종가 값을 하나씩 쓰는 어드바이저의 코드를 첨부합니다. 도구.

 #property copyright "S.I.Shlikov"
#property link       ""
int init()  
  {
   string Name= Symbol ();
   int h= FileOpen ( Symbol ()+ "-" + Period ()+ ".csv" , FILE_CSV | FILE_WRITE | FILE_READ , ";" );
     if (h< 1 )
      {
       Print ( "Файл не найден : " , GetLastError ());
       return (false);
      }
   FileSeek (h, 0 , SEEK_END );
   FileWrite (h, "Date" ,Name, "Period" , Period ());
   FileClose (h);        
  }
int start()
  {
   int h= FileOpen ( Symbol ()+ "-" + Period ()+ ".csv" , FILE_CSV | FILE_WRITE | FILE_READ , ";" );
     if (h< 1 )
      {
       Print ( "Файл не найден : " , GetLastError ());
       return (false);
      }
   string Wtime= TimeToStr ( TimeCurrent (),TIME_DATE|TIME_MINUTES);
   FileSeek (h, 0 , SEEK_END );
   FileWrite (h,Wtime, NormalizeDouble (Close[ 0 ], Digits ));
   FileClose (h);   
   return ( 0 );
  }