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

 
MakarFX :

답변, 목발 및 좋은 솔루션에 감사드립니다. 하지만 내 아이디어의 관점에서 보면 균형이 떠 있기 때문에 약간 잘못 작동합니다. 아마도 즉시 수행되지 않을 것이고 어떤 경우에는 내 주문이 어떤 이유로 마이너스. 그러나 성장은 예상대로 진행되었지만 그 마이너스와 함께 손실도 증가했습니다. 나는 모든 것에 침을 뱉고 입찰의 한계를 수동으로 설정하기로 결정했습니다. 매일 조정해야합니다.

 
Порт-моне тв :

답변, 목발 및 좋은 솔루션에 감사드립니다. 하지만 내 아이디어의 관점에서 보면 균형이 떠 있기 때문에 약간 잘못 작동합니다. 아마도 즉시 수행되지 않을 것이고 어떤 경우에는 내 주문이 어떤 이유로 마이너스. 그러나 성장은 예상대로 진행되었지만 그 마이너스와 함께 손실도 증가했습니다. 나는 모든 것에 침을 뱉고 입찰의 한계를 수동으로 설정하기로 결정했습니다. 매일 조정해야합니다.

기능이 올바르게 작동합니다.

이 시도

 //+--------------------------------------------------------------------------------------------------------------------+

sb1 = StartBalance();
................

//+--------------------------------------------------------------------------------------------------------------------+
//|  Баланс на начало периода                                                                                          |
//+--------------------------------------------------------------------------------------------------------------------+
double StartBalance()
  { double b = 0 ;
   if (AccountBalance()> 0 ) {b = AccountBalance()-DayProfit();}
   return (b);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//|  Суммарный профит на начало периода                                                                                |
//+--------------------------------------------------------------------------------------------------------------------+
double DayProfit()
  { double p = 0 ; datetime st= iTime ( _Symbol , PERIOD_D1 , 0 );
   for ( int pos=OrdersHistoryTotal()- 1 ;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos,SELECT_BY_POS,MODE_HISTORY)== true )
        {
         if (OrderSymbol() == _Symbol )
           { 
             if (OrderCloseTime()>=st){p+=OrderProfit()+OrderSwap()+OrderCommission();}
           }
        }
     }
   return (p);
  }
//+--------------------------------------------------------------------------------------------------------------------+

주문 마감 기능에 잔액 업데이트 추가

   if (OrderClose( бла бла бла ))
     {
       StartBalance(); Print ( "Order Close" );
     }
 
Maxim Kuznetsov :

날의 변화를 포착하고 그 순간의 균형 가치를 계산합니다 .

헛되이 그들은 "적절한 지표를 취하라"고 말했습니다. 그것은 몇 줄의 코드에 맞지 않을 것입니다. 상당히 방대한 알고리즘입니다.

"지금 알려진 날짜의 숫자는 전날의 숫자와 같지 않습니다"라는 요일 변경을 잡기 쉽지만 더 복잡합니다.


조류 " 현재 잔고 계산 " (출금/입금 및 스왑 및 커미션에 대한 일부 버그 제외)

잔액 := 현재 계정 잔액. AccountBalance()

기록에 있는 모든 마감 시장 주문에 대해:

마감 시간이 D와 현재 순간 사이에 있으면 Balance -= OrderProfit()+OrderSwap()+OrderCommision();

열거가 완료되면 잔액이 원하는 값입니다 ..

그러나 수수료는 개시 시 부과됩니다(즉, 잔액 라인에 영향을 미침). 우리는 마감 시 이를 고려할 것이며, 스왑은 당일 변경 시 적용되며 다시 한 번 마지막에

깊이 D가 크면 열거에 필요한 모든 주문을 얻지 못할 가능성이 있습니다.

 
Порт-моне тв :

답변, 목발 및 좋은 솔루션에 감사드립니다. 하지만 내 아이디어의 관점에서 보면 균형이 떠 있기 때문에 약간 잘못 작동합니다. 아마도 즉시 수행되지 않을 것이고 어떤 경우에는 내 주문이 어떤 이유로 마이너스. 그러나 성장은 예상대로 진행되었지만 그 마이너스와 함께 손실도 증가했습니다. 나는 모든 것에 침을 뱉고 입찰의 한계를 수동으로 설정하기로 결정했습니다. 매일 조정해야합니다.

나는 이미 당신의 소원과 조언에 빠졌습니다 ... 따라서 아마도 내 조언은 주제에서 완전히 벗어 났을 것입니다. 실례합니다 ...

내가 이해하는 것처럼 하루의 시작에 잔액을 수정하고 하루 동안 손익을 계산해야하며 이에 따라 거래를 계속하기로 결정해야합니다 ...

그래서 여기에 해결책이 있습니다

 datetime dayTime;
double dayBalance;
// Дальше в функции OnTick()
if (dayTime != iTime ( _Symbol , PERIOD_D1 , 0 );
 {
  dayBalance = AccountInfoDouble ( ACCOUNT_BALANCE ));
  dayTime = iTime ( _Symbol , PERIOD_D1 , 0 );
 }
// Дальше текущий баланс можно сравнивать с балансом на начало дня…
// В начале следующего дня в переменной dayBalance будет другое значение баланса…

낮 동안 고문이 다시 시작되면 OnInit()에서 스왑 및 커미션을 고려하여 오늘 주문의 손익 계산을 제공하고 하루가 시작될 때 잔액을 계산해야 합니다. .

나는 Makar의 능력을 믿습니다. 그는 이미 코드에서 이 모든 것을 보여줄 수 있습니다 ...

 

안녕하세요. 말해 주세요.

하루의 시작부터 현재 막대의 수를 결정하는 방법은 무엇입니까?

고맙습니다.

 
prom18 :

안녕하세요. 말해 주세요.

하루의 시작부터 현재 막대의 수를 결정하는 방법은 무엇입니까?

고맙습니다.

       double BarNumber= NormalizeDouble (( TimeCurrent ()- iTime ( _Symbol , PERIOD_D1 , 0 ))/ 60 / Period () + 0.5 , 0 );

이것은 현재 막대입니다. 마지막으로 닫힌 경우 -0.5

 
MakarFX :

이것은 현재 막대입니다. 마지막으로 닫힌 경우 -0.5

고맙습니다. 노력하겠습니다.

 
MakarFX :

이것은 현재 막대입니다. 마지막으로 닫힌 경우 -0.5

분과 외래종은 실패할 것입니다.

막대의 수 != number_of_counts

마디는 한 번만 건너뜁니다. 15분 안에 12분 마디가 있을 수 있습니다.

재고 iBarShift()를 사용하는 것이 좋습니다.

 
Maxim Kuznetsov :

재고 iBarShift()를 사용하는 것이 좋습니다.

나는 방법을 모른다(

 
MakarFX :

나는 방법을 모른다(

기능

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 26.02.2008                                                     |
//|  Описание : Возвращает реальный номер бара от начала суток.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (          0 - текущий таймфрейм)       |
//|    dt - дата и время открытия бара (          0 - текущее время)           |
//+----------------------------------------------------------------------------+
int iBarOfDayReal( string sy= "" , int tf= 0 , datetime dt= 0 ) {
   if (sy== "" || sy== "0" ) sy= Symbol ();
   if (tf<= 0 ) tf= Period ();
   if (dt<= 0 ) dt= TimeCurrent ();
   if (tf> PERIOD_D1 ) {
     Print ( "iBarOfDayReal(): Таймфрейм должен быть меньше или равен D1" );
     return ( 0 );
  }

   int cd=TimeDay(dt);                       // текущий день месяца
   int nb= iBarShift (sy, tf, dt, False);       // номер текущего бара
   int bd= 0 ;                                 // номер бара от начала суток

   while (TimeDay( iTime (sy, tf, nb))==cd) {
    nb++;
    bd++;
  }

   return (bd);
}