[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 825

 
eugggy :
일반적으로 if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))break가 의미하는 바는 명확합니다. 그런 순서가 선택되지 않으면 중단하거나 무엇입니까?


OrderSelect( https://docs.mql4.com/ru/trading/OrderSelect 참조 )는 함수가 실패하면 FALSE를 반환합니다. 중단 연산자는 https://docs.mql4.com/en/basis/operators/break 를 참조하십시오.

로 단순화할 수 있습니다.

주문 선택(i,SELECT_BY_POS,MODE_TRADES);

선택하는 주요 순서.

 
eugggy :


그리고 나에게는 완전히 다른 것처럼 보입니다. 알려주십시오. 이것을 코드에 삽입할 수 있습니까? if(Tip==OP_BUYSTOP||Tip==OP_SELLSTOP&&Minute()<59&&Minute()>57) OrderDelete(Ticket);

그렇다면 어떤 부분입니까?


귀하의 코드를 보지 않고 (모두 귀하의 알고리즘에 따라 다름) 다음과 같이 가정할 수 있습니다.

if(OrderType()==OP_BUYSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLSTOP) OrderDelete(OrderTicket());
if(OrderType()==OP_BUYLIMIT) OrderDelete(OrderTicket());
if(OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

변수의 순서만 제자리에 배치되어야 하고 ||가 있는 조건의 대괄호만 있어야 합니다. 및 &&를 사용하여 올바르게 배치합니다.

Minute()<59&&Minute()>57 조건은 Minute()==58 로 단축하거나 >= 또는 <= 를 사용할 수 있습니다.

기간이 끝날 때나 특정 시간에 보류 중인 주문을 강제로 종료하려면 만료 매개변수(주문 만료일)를 설정할 수 있습니다. https://docs.mql4.com/ru/trading/OrderSend 참조 . 이 경우 클로저 프로그래밍을 엉망으로 만들 필요가 없습니다. 그리고 주문은 의사소통 부족에 대한 수정 없이 무조건 종료됩니다

 
eugggy :

예, 많은 이점이 있습니다. 공짜가 없었으면 했을텐데 교과서가 아주 복잡하게 쓰여져 있습니다.
당신은 알다시피 ... 나는 "그들이 지금 이야기하고있는"방법에 대해 이야기하고 있습니다. :)

공짜, 친구들! 에야디야! 코몬 에브리 바디!!!

아마도 SC 교과서가 그렇게 쓰여졌다면 6+가 될 것입니다.

주제넘어서 죄송합니다...

 
eugggy :

아니요, 대신 필요하지 않습니다. 추가로 필요합니다. 차트를 살펴보았습니다. 때때로 가격이 고가-저가 채널을 벗어나지 않고 대기 중인 주문이 남아 있습니다. 만료로 이 문제를 해결할 수 있는 경우 새 항목이 나타나기 전에 보류 중인 항목만 닫으면 됩니다. 저는 찬성합니다. 1986년 책에 대해 진지한가요? 나는 나 자신이 고대이지만 내 생각에는 이것은 너무 많습니다.


추가로 유사한 코드를 추가로 작성해야 하는 방법입니다. 웬일인지 당신은 코드에 어떤 종류의 뒤죽박죽이있는 것 같습니다.

나는 1986년 책에 대해 농담을 한 것이 아니다. 반복합니다. 프로그래밍의 기본을 이해하려면 현대적인 언어 구성으로 머리를 어지럽히지 않고 이해해야 합니다. 기본이 필요합니다. 고등학교 컴퓨터 과학 교과서, 특히 첫 번째 교과서는 "바보"를 위해 체계적으로 잘 쓰여져 있습니다. 현대 교과서가 어떻게, 누구를 위해, 왜 쓰여지는가는 별개의 문제입니다.

 

날짜 시간 제비 가격

26 2010.01.05 12:24 매도 12 0.10 1.44026 1.44907 1.43526 0.00 3200.09
28 2010.01.05 13:21 매수 13 0.26 1.44326 1.43445 1.44826 0.00 3200.09
30 2010.01.05 15:34 매도 14 0.43 1.44026 1.44907 1.43526 0.00 3200.09
32 2010.01.05 16:27 매수 15 0.72 1.44326 1.43445 1.44826 0.00 3200.09
34 2010.01.05 17:18 매도 16 1.19 1.44026 1.44907 1.43526 0.00 3200.09

다음은 각 방향으로 5개의 미결 주문입니다.

모든 미결 주문에 대한 총 마진을 계산하는 방법은 무엇입니까?

쌍: EURODOLLAR , 계약 100000, 레버리지 100.

 
ikatsko :

날짜 시간 제비 가격

26 2010.01.05 12:24 매도 12 0.10 1.44026 1.44907 1.43526 0.00 3200.09
28 2010.01.05 13:21 매수 13 0.26 1.44326 1.43445 1.44826 0.00 3200.09
30 2010.01.05 15:34 매도 14 0.43 1.44026 1.44907 1.43526 0.00 3200.09
32 2010.01.05 16:27 매수 15 0.72 1.44326 1.43445 1.44826 0.00 3200.09
34 2010.01.05 17:18 매도 16 1.19 1.44026 1.44907 1.43526 0.00 3200.09

다음은 각 방향으로 5개의 미결 주문입니다.

모든 미결 주문에 대한 총 마진을 계산하는 방법은 무엇입니까?

쌍: EURODOLLAR, 계약 100000, 레버리지 100.

MarketInfo( Symbol (),MODE_MARGINREQUIRED);

필요에 따라 구매하기 위해 1랏을 여는 데 필요한 무료 마진의 양을 반환합니다.

또한 다음이 유용할 수 있습니다.

더블 AccountFreeMarginCheck ( 문자열 기호, int cmd, 이중 볼륨)

현재 계정의 현재 가격으로 지정된 위치를 연 후 남아 있는 여유 증거금의 양을 반환합니다. 사용 가능한 자금이 충분하지 않으면 오류 134(ERR_NOT_ENOUGH_MONEY)가 생성됩니다.
 
빠른 응답에 감사드립니다. 하지만 이 포지션이 열리기 전에 마진을 계산하고 싶습니다! 전략은 눈사태입니다. 해당 위치를 연 후 스탑 아웃이 있는지 알아야 합니까? 예정된 모든 로트의 로트 크기는 미리 알려져 있습니다. 알고 싶습니다: 얼마나 많은 주문(미리 결정된 증가하는 로트와 함께)을 열 수 있습니까?
 
ikatsko :
빠른 응답에 감사드립니다. 하지만 이 포지션이 열리기 전에 마진을 계산하고 싶습니다! 전략은 눈사태입니다. 해당 위치를 연 후 스탑 아웃이 있는지 알아야 합니까? 예정된 모든 로트의 로트 크기는 미리 알려져 있습니다. 알고 싶습니다: 얼마나 많은 주문(미리 결정된 증가하는 로트와 함께)을 열 수 있습니까?
 // ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots( double lt)
{
   double ltcorr;
   double pnt =      MarketInfo( Symbol (),MODE_POINT);
   double mspr =     MarketInfo( Symbol (),MODE_SPREAD);
   double dig =      MarketInfo( Symbol (),MODE_DIGITS);
   double MaxLot =   MarketInfo( Symbol (),MODE_MAXLOT);
   double MinLot =   MarketInfo( Symbol (),MODE_MINLOT);
   double StpLot =   MarketInfo( Symbol (),MODE_LOTSTEP);
   double OneLot =   MarketInfo( Symbol (),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble (AccountFreeMargin()/ 4.0 ,dig);     // Свободные средства, разрешенные к торговле
   
   lt= MathAbs (lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=ltcorr*OneLot +mspr*pnt ;     // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)               // Если свободных средств больше, чем цена позиции - 
      {
         return (ltcorr);                                                             // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)         // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr= MathAbs ( MathFloor (TradeMrg/OneLot/StpLot)*StpLot);               // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot +mspr*pnt ;                      
         Print ( "Func CorrectLots: лот " ,lt, " скорректирован до " ,ltcorr,
               " Стоимость позы до корректировки = " ,Money,
               " Стоимость позы после корректировки = " ,MoneyCorr
               ); 
         return (ltcorr);                                                         // ... и вернём его значение
      }
   Print ( "Func CorrectLots: лот вернули без изменений" );
   if (lt>MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<MinLot) ltcorr=MinLot;   // ... значений лота
   return (ltcorr);                             // Возврат изначального лота в непредусмотренных случаях с сообщением
}

자신을 위한 것을 찾아보세요... :)

다시 한번

더블 AccountFreeMarginCheck ( 문자열 기호 , int cmd, 이중 볼륨)

나는 또한 구피 마틴게일을 사용하는 주문하기 위해 Expert Advisor에서 이 기능을 사용했습니다.
보다 안정적인 작업을 위해 포즈를 열기 전에 다음과 같이 작성했습니다.

 double lt;                           // Лот
// --------------------------------- +

lt=CorrectLots(lt* 2 );                 // Умножаем лот на 2 с проверкой и коррекцией под допустимый размер лота

// ------- Открытие позы ----------- +
 
Artem, 마진을 직접 계산해야합니다. 즉, 계산 공식을 알아야합니다. 현재 기능에 대한 최종 응답은 필요하지 않습니다. 사실 계산식은 알지만 겹친 포지션에 대한 마진계산의 특징이 있습니다.!!! 그리고 겹치는 위치가 무엇인지조차 모릅니다! 그는 특히 각 후속 포지션이 이전 포지션과 반대 방향으로 열리는 것이 분명한 예를 들었다. 모든 로트를 합산하여 오픈 포지션 의 마진을 계산하면(그리고 이 금액을 공식에 삽입), 이는 StopOut을 적용할 때 딜러 센터의 실제 반응과 일치하지 않습니다. DC가 고려하는 대로 고려하고 싶습니다.
 
ikatsko :
Artem, 마진을 직접 계산해야합니다. 즉, 계산 공식을 알아야합니다. 현재 기능에 대한 최종 응답은 필요하지 않습니다. 사실 계산식은 알지만 겹친 포지션에 대한 마진계산의 특징이 있습니다.!!! 그리고 중첩 위치가 무엇인지조차 모릅니다! 그는 특히 각각의 후속 포지션이 이전 포지션과 반대 방향으로 열리는 것이 분명한 예를 들었다 . 모든 로트를 합산하여 오픈 포지션의 마진을 계산하면(그리고 이 금액을 공식에 삽입), 이는 StopOut을 적용할 때 딜러 센터의 실제 반응과 일치하지 않습니다. 나는 DC가 믿는대로 계산하고 싶습니다

겹쳐진 위치는 잠긴 위치와 같지 않습니까? 이는 거래량이 동일하지만 방향이 반대인 두 개의 오픈 포지션을 유지하는 데 필요한 마진입니다. 일반적으로 두 개의 잠긴 위치 중 하나와 동일한 볼륨의 열린 위치 하나를 유지하는 데 필요한 마진의 절반입니다.

바로 알아차렸지만, 당신을 혼란스럽게 할 줄은 몰랐습니다...

같은 Expert Advisor에 대해 이렇게 마진을 계산했는데 지금은 모르겠고 틀릴수도??? :

 // ======================================================================
// -------------------------- Рассчёт свободной маржи -------------------
// ======================================================================
bool LastFreeMargin( string sy, int op, double lot)
{
   if (sy== "0" || sy== "" ) sy=Symbol();
   double FreeEqu  = AccountFreeMargin();                         // Вся маржа
   double FreeEqu4 = NormalizeDouble(Equ_Start/ 4.0 , 2 );           // Делим маржу на 4 (Средства для торговли)
   double CheckEqu = AccountFreeMarginCheck(sy, op, lot);         // Остаток всех средств после открытия позы 
   double EquTrade = FreeEqu-CheckEqu;                             // Средства, требуемые для открытия следующей
   
   if (FreeEqu4-EquTrade> 0 ) return ( true );
   else return ( false );
}   

이것이 DC가 귀하에게 반환하는 모든 것입니다.

MODE_MARGININIT 29 1 lot에 대한 초기 보안 요구 사항
MODE_MARGIN유지 관리 서른 1랏당 오픈 포지션을 지원하기 위한 담보 금액
MODE_MARGINHEDGED 31 1랏당 클로즈드 포지션에서 부과되는 마진
MODE_MARGIN필수 32 구매를 위해 1랏을 여는 데 필요한 무료 자금의 양