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

 

나는 계속해서 개선하고 있습니다:

조건이 참이면

오픈 오더 1

가격이 있어야 할 곳으로 갔는지 여부

오픈 오더2

LastLot= 주문 2(또는 그 이상)

LastPrice= order2(또는 그 이상)

가격이 맞았는지 아닌지...

LastLot= 주문 3(또는 그 이상)

LastPrice= 주문 3(또는 그 이상)

문제는 - 마지막(또는 아님) 주문은 항상 손절매와 테이크 사이에 있으므로 주문 자체가 중단되기 때문에 나머지가 닫힐 때 값이 재설정되지 않습니다. 알 수없는 금액으로 나머지와 연결하는 방법.

마지막 첫 번째 또는 끝에서 두 번째를 나머지에 연결하는 메커니즘은 숫자가 숫자와 함께 변경되기 때문에 비효율적임이 밝혀졌습니다.

결과는 "이 시리즈의 주문 중 하나가 마감되면 다른 모든 주문을 닫습니다"와 같아야 합니다.

시리즈 카운트다운 - 여기에서 현재 방향의 첫 번째 순서(다른 유형을 열지 않음) 또는 만들 추가 식별자 또는 기타 바인딩 방법. 키 - 조건에 따라 1차 오픈, 나머지는 보조 토핑입니다.

이견있는 사람?

 
trader781 :

나는 계속해서 개선한다:

조건이 참이면

오픈 오더 1

가격이 있어야 할 곳으로 갔는지 여부

오픈 오더2

LastLot= 주문 2(또는 그 이상)

LastPrice= order2(또는 그 이상)

가격이 맞았는지 아닌지...

LastLot= 주문 3(또는 그 이상)

LastPrice= 주문 3(또는 그 이상)

문제는 - 마지막(또는 아님) 주문은 항상 손절매와 테이크 사이에 있으므로 주문 자체가 중단되기 때문에 나머지가 닫힐 때 값이 재설정되지 않습니다. 알 수없는 금액으로 나머지와 연결하는 방법.

마지막 첫 번째 또는 끝에서 두 번째를 나머지에 연결하는 메커니즘은 숫자가 숫자와 함께 변경되기 때문에 비효율적임이 밝혀졌습니다.

결과는 "이 시리즈의 주문 중 하나가 마감되면 다른 모든 주문을 닫습니다"와 같아야 합니다.

시리즈 카운트다운 - 여기에서 현재 방향의 첫 번째 순서(다른 유형을 열지 않음) 또는 만들 추가 식별자 또는 기타 바인딩 방법. 키 - 조건에 따라 1차 오픈, 나머지는 보조 토핑입니다.

이견있는 사람?

혼란스럽고 이해할 수 없습니다. 자신의 생각을 더 명확하게 표현하려고 노력하십시오.

여기 있습니다: " 가격이 원래대로 갔는지 여부 - open order2 " - 어떤 경우에도 " open order2 "를 이해하는 방법은 무엇입니까?

그리고 그러한 "또는"만 더 ...

그리고 " 미지의 수량으로 나머지와 연결하는 방법 "과 같은 질문이 없도록 먼저 수량을 찾아야합니다.

 
Vitalie Postolache :

혼란스럽고 이해할 수 없습니다. 자신의 생각을 더 명확하게 표현하려고 노력하십시오.

여기 있습니다: " 가격이 원래대로 갔는지 여부 - open order2 " - 어떤 경우에도 " open order2 "를 이해하는 방법은 무엇입니까?

그리고 그러한 "또는"만 더 ...

그리고 " 미지의 수량으로 나머지와 연결하는 방법 "과 같은 질문이 없도록 먼저 수량을 찾아야합니다.

숫자로 OK

환율 EURUSD= 1.10000

현재 주문에 대한 TOR에 따라 구매 주문을 여는 명령이 주어졌습니다(이미 작성됨)

EURUSD=1.10200인 경우 구매에 추가(이미 작성됨)

EURUSD=1.09800인 경우 구매에 추가(이미 작성됨)

등등 200씩 증가

이러한 주문 중 하나라도 종료된 경우(스탑 및 테이크는 서 있지만 전혀 없음)

전체 그리드 닫기

그리드를 식별하는 방법을 찾고 있습니다.
 
trader781 :

숫자로 OK

환율 EURUSD=1.10000

현재 주문에 대한 TOR에 따라 구매 주문을 여는 명령이 주어졌습니다(이미 작성됨)

EURUSD=1.10200인 경우 구매에 추가(이미 작성됨)

EURUSD=1.09800인 경우 구매에 추가(이미 작성됨)

등등 200씩 증가

이러한 주문 중 하나라도 종료되는 경우(스톱 및 테이크는 대기 상태)

전체 그리드 닫기

그리드를 식별하는 방법을 찾고 있습니다.
주문 번호가 있는 댓글을 추가할 수 있습니다. 그리고 일련의 전체 주문이 동일한 유형인 경우 해당 주문을 세고 숫자를 수정하면 됩니다.
 
Vitalie Postolache :
주문 번호가 있는 댓글을 추가할 수 있습니다. 그리고 일련의 전체 주문이 동일한 유형인 경우 해당 주문을 세고 숫자를 수정하면 됩니다.

댓글도 생각해봤는데 후기로 봐서는 셰프님이 못드신다고 하셔서 삭제하거나 본인꺼로 바꾸시더라구요

재계산에 대해, 즉 다음 금액을 추가할 때 금액을 계산하고 수정해야 합니까?

 
trader781 :

재계산에 대해, 즉 다음 금액을 추가할 때 금액을 계산하고 수정해야 합니까?

네. 그리고 마지막 시간 이후로 숫자가 줄어들었다면 나머지는 모두 닫으십시오.

또한 기록에서 마감된 주문을 모니터링할 수도 있습니다. 그리고 지정된 특성에 해당하는 새로 마감된 주문이 나타나는 즉시 시리즈를 닫습니다.

여전히 TP/SL을 순서대로 설정할 수는 없지만 전체 시리즈에 대해 EA에서 총 TP/SL을 계산합니다. 그리고 그들에게 시리즈를 닫습니다. 장점 - DC는 스톱 레벨을 볼 수 없으며, TP 또는 SL이 한 주문에서 작동하면 나머지 시리즈를 찾는 문제가 사라집니다.
 
좋은 하루 .. 새해 복 많이 받으십시오 .. 귀하의 모든 행운과 번영을 기원합니다 .. 계정 레버리지를 고려하여 로트 계산이 가능한 한 많이 발생하도록이 코드를 변경하십시오
//+------------------------------------------------------------------+
double volume( string symbol, double risk, double sl)
  {
   double lot= 0.0 ;
   double procent= 0.0 ;
   double balans= 0.0 ;
   double tc = SymbolInfoDouble (symbol, SYMBOL_TRADE_CONTRACT_SIZE );
   double tv = SymbolInfoDouble (symbol, SYMBOL_TRADE_TICK_VALUE );
   double ts= SymbolInfoDouble (symbol, SYMBOL_TRADE_TICK_SIZE );
   double point= SymbolInfoDouble (symbol, SYMBOL_POINT );

   if (Type_Balanse==Balance) balans= AccountInfoDouble ( ACCOUNT_BALANCE );
   if (Type_Balanse==Equity) balans= AccountInfoDouble ( ACCOUNT_EQUITY );
   if (Type_Balanse==FreeMargin) balans= AccountInfoDouble ( ACCOUNT_FREEMARGIN );

   procent=(balans/ 100.0 )*risk;

   switch (( int ) MarketInfo (symbol, MODE_PROFITCALCMODE ))
     {
       case 0 : if (sl!= 0 && tv!= 0 ) lot=procent/(sl*tv); break ;
       case 1 : if (sl!= 0 && point!= 0 && tc!= 0 ) lot=procent/(sl*point*tc); break ;
       case 2 : if (sl!= 0 && point!= 0 && tv!= 0 && ts!= 0 ) lot=procent/(sl*point*(tv/ts)); break ;
     }
   return (NormalizeVolume(symbol,lot));
  }
 
그럼 간단하게 여쭤볼게요 어드바이저에 등록하는 방법 레버리지에 따라 로트 자동계산 .. 레버리지 1:50 예치금 3000 ..
 
Movlat Baghiyev :
그럼 간단하게 여쭤볼게요 어드바이저에 등록하는 방법 레버리지에 따라 로트 자동계산 .. 레버리지가 1:50 예치금 3000이라고 합시다..

다음과 같이 시도하십시오.

void OnTick ()
{
   Comment ( cLot( 100 ) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot( double Percent= 0 ) {
double Free= AccountFreeMargin (),
        One_Lot= MarketInfo ( _Symbol , MODE_MARGINREQUIRED ),
        Min_Lot= MarketInfo ( _Symbol , MODE_MINLOT ),
        cStep= MarketInfo ( _Symbol , MODE_LOTSTEP ),
        Lots_New= 0 ;
if (Percent > 100 ) {
    Percent = 100 ;
  }
   if (Percent == 0 ) {
    Lots_New = 0 ;
     return ( 0 );
   } else {
    Lots_New = MathFloor (Free*Percent/ 100 /One_Lot/cStep)*cStep;
   }
   if (Lots_New < Min_Lot) {
    Lots_New = Min_Lot;
  }
   if (Lots_New*One_Lot > Free) {
     return ( 0 );
  }
   return ( NormalizeDouble (Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
   double lotStep = MarketInfo ( _Symbol , MODE_LOTSTEP );
return (( int ) MathCeil ( MathAbs ( MathLog (lotStep)/ MathLog ( 10 ))));
}
 
죄송합니다. 어떤 종류의 위험 % 선택이 필요했습니다. 최대 0.01 단계로 가장 가능한 로트를 즉시 여는 것은 어리석은 일입니다.