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

 
Maxim Kuznetsov :
이 텍스트의 원본은 평행 세계에서 온 것 같습니다. Google 번역으로 두 번 번역한 다음 Alice가 다시 말했어요 :-)

좋은. 이제 나는 더 쉽게 쓸 것이다. 마지막 로트를 찾을 수 있는 기능이 있습니다. FindLastLots라고 합니다. 그리고 마지막 로트만 찾는 것이 아니라 로트를 변경할 수 있는 기능을 만들고 싶습니다. 즉, extern lot = 0.01이면; 나는 정지 손실 이후에 작성된 함수를 사용하여 lot = 0.01, 즉 0.04로 변경할 수 있어야 합니다. 곱셈을 사용하지 않습니다. 그리고 여기에서 이것이 일반적으로 어떻게 구현될 수 있는지 이해하는 데 도움이 필요합니다.

 double FindLastLots()
  {
   double oldlots= 0 ;
   int oldticket;
   int ticket= 0 ;

   for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
           {
            oldticket=OrderTicket();
             if (oldticket>ticket)
              {
               oldlots= OrderLots();
               ticket = oldticket;
              }
           }
        }
     }
   return (oldlots);
  }
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 
Corvin85 :

...

변경 로트 = 0.01, 말해서 0.04. 곱셈을 사용하지 않습니다.

...

음... 곱셈에 문제가 있으면 더하기를 통해 원하는 결과를 얻을 수 있습니다.

 
Alexey Viktorov :

음... 곱셈에 문제가 있으면 더하기를 통해 원하는 결과를 얻을 수 있습니다.

-:)

말없이
 
이 함수에 while 루프를 추가하여 외부 변수를 선택한 순서 대로 차례로 반복할 수 있습니까? 그러나 어떻게 "반환된 값"을 꺼내서 사용할 수 있습니까?
 
Alexey Viktorov :

음... 곱셈에 문제가 있으면 덧셈을 통해 원하는 결과를 얻을 수 있습니다.

비꼬는 말은 이해하지만 곱셈이나 계산의 경우 외부 변수가 많은 만큼 승수가 있어야 한다는 점을 이해합니다. 이것은 탈출구가 아닙니다. 솔직히 생각해봤는데...

 
여보세요!!! M5 기간을 기반으로 어드바이저를 만들고 있습니다....하지만 신호가 트리거됩니다(예: 9:33, 12:11).... 새로 주문을 여는 방법을 알려주세요. 신호가 현재 신호에 있었다면 촛불 ?
 
Corvin85 :

비꼬는 말은 이해하지만 곱셈이나 계산의 경우 외부 변수가 많은 만큼 승수가 있어야 한다는 점을 이해합니다. 이것은 탈출구가 아닙니다. 솔직히 생각해보니...

자세한 내용은 지금 기억나지 않지만, 제비를 계산할 때 복잡한 것을 지시했습니다. 결과적으로 계산이 이루어진 공식이 발견되었습니다.

주문에 대해 더 자세히 설명해 주시겠습니까? 그러면 누군가 이 공식을 제안할 수 있습니다.

 
Alexey Viktorov :

자세한 내용은 지금 기억나지 않지만 그들은 나에게 제비를 계산할 때 복잡한 것을 지시했습니다. 결과적으로 계산이 이루어진 공식이 발견되었습니다.

주문에 대해 더 자세히 설명해 주시겠습니까? 그러면 누군가 이 공식을 제안할 수 있습니다.

 #property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

extern double Lot  = 0.01 ;
extern double Lot2  = 0.02 ;
extern double Lot3  = 0.05 ;
extern double Lot3  = 0.07 ;
//----------- И так далее-------//

여러 외부 변수가 있습니다. Stoploss에 의해 주문이 마감된 경우 외부 변수에 지정된 새 로트로 새 주문이 열립니다. (아마도 처음에는 작성해야 했기 때문에) 그리고 여기에 걸림돌이 있습니다. 코드에서 올바르게 작성하는 방법을 모르겠습니다. 그리고 위에서 쓴 것처럼 곱셈이나 계산도 외부 승수도 도움이 되지 않습니다. 닫힌 주문에서 어떻게 든 데이터를 정렬해야합니다 ...

 
Corvin85 :

여러 외부 변수가 있습니다. Stoploss에 의해 주문이 마감된 경우 외부 변수에 지정된 새 로트로 새 주문이 열립니다. (아마도 처음에는 작성해야 했기 때문에) 그리고 여기에 걸림돌이 있습니다. 코드에서 올바르게 작성하는 방법을 모르겠습니다. 그리고 위에서 쓴 것처럼 곱셈이나 계산도 외부 승수도 도움이 되지 않습니다. 닫힌 주문에서 어떻게 든 데이터를 정렬해야합니다 ...

주문을 열 때 주문을 여는 데 사용하는 규칙/변수의 번호를 댓글에 작성하십시오.

그런 다음 기록을 파헤칠 때 이 번호를 꺼내고 1을 추가하고 새 규칙 번호를 얻습니다.

 
Corvin85 :

여러 외부 변수가 있습니다. Stoploss에 의해 주문이 마감된 경우 외부 변수에 지정된 새 로트로 새 주문이 열립니다. (아마도 처음에는 작성해야 했기 때문에) 그리고 여기에 걸림돌이 있습니다. 코드에서 올바르게 작성하는 방법을 모르겠습니다. 그리고 위에서 쓴 것처럼 곱셈이나 계산도 외부 승수도 도움이 되지 않습니다. 닫힌 주문에서 어떻게 든 데이터를 정렬해야합니다 ...

이 코드로 실험해 보세요. 필요할 수도 있습니다.

 #property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict

input double Lot_01  = 0.1 ;
input double Lot_02  = 0.2 ;
input double Lot_03  = 0.3 ;
input double Lot_04  = 0.4 ;
input double Lot_05  = 0.5 ;
input double Lot_06  = 0.6 ;
input double Lot_07  = 0.7 ;

double GetNextLot( const double last_lot)
{
   if (last_lot>=Lot_07) return (Lot_07);
   if (last_lot>=Lot_06) return (Lot_07);
   if (last_lot>=Lot_05) return (Lot_06);
   if (last_lot>=Lot_04) return (Lot_05);
   if (last_lot>=Lot_03) return (Lot_04);
   if (last_lot>=Lot_02) return (Lot_03);
   if (last_lot>=Lot_01) return (Lot_02);
   return (Lot_01);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   Print (Lot_01, " ---> " ,GetNextLot(Lot_01));
   Print (Lot_02, " ---> " ,GetNextLot(Lot_02));
   Print (Lot_03, " ---> " ,GetNextLot(Lot_03));
   Print (Lot_04, " ---> " ,GetNextLot(Lot_04));
   Print (Lot_05, " ---> " ,GetNextLot(Lot_05));
   Print (Lot_06, " ---> " ,GetNextLot(Lot_06));
   Print (Lot_07, " ---> " ,GetNextLot(Lot_07));
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
void OnTick ()
  {

   
  }
//+------------------------------------------------------------------+

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.7 ---> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.6 ---> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.5 ---> 0.6

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.4 ---> 0.5

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.3 ---> 0.4

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.2 ---> 0.3

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.1 ---> 0.2

내 GetNextLot() 함수에서 마지막으로 마감된 주문의 볼륨을 제출하고 Lot_XX 설정의 다음 값을 반환합니다.

이러한 코드의 유일한 제한 사항은 로트 설정이 오름차순이어야 한다는 것입니다. 코드가 간단하고 이해하기 쉬우므로 작업에 맞게 다시 만들 수 있습니다.