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

 

edyuson :
Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.

세르게예프 :

int 카운터를 만들고 열 때마다 +1을 추가하십시오.

원하는 카운터 값을 입력한 후 이미 및 lot*koef가 수행하도록 허용합니다.


네, 생각보다 쉽지 않습니다. 이제 현실이 되기 시작했습니다. 그리고 주기: lot-0.01, lot-0.01, lot-0.01 및 lot-0.02, lot-0.02, lot-0.02를 곱한 후에만 추가: lot-0.04, lot -0.04, lot-0.04 ....가 중단되어야 합니다. 이익으로, 그리고 무스를 계속하십시오. 다른 포럼에는 다음과 같은 옵션이 있었습니다. Double koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1을 선언할 수 있습니다. 0, 1.0, 2.0 .......} - 배열로 필요한 계수로 채우고 정적 또는 전역 변수 int k=0;
그러면 lot=lot*koef[k++]; 시리즈 시작: k=0;

그리고 이것들:
정수 k = 1;
정수 값 = 3;
if (k/koef == k) { lot*=2; k++; } 하지만 그게 아닙니다.

시도 유형 카운터: int j;
for(j=0; j<15; j++)
, 그러나 다시는 아닙니다. 예, 여기에 모든 것이 있습니다.
intX=0;
이중 S = 0.0000;
외부 이중 로트 = 0.01;
외부 이중 계수 = 2.0;
외부 int SL=30;
외부 정수 TP=120;
더블 DL;
이중;
정수 초기화()
{
a=많다;
리턴(0);
}
정수 초기화()
{
리턴(0);
}

정수 시작()

{
if(OrdersTotal() == 0 && X==1)
{
if (닫기[0]>dl){lot=a;}
X=0;
}

if(OrdersTotal() == 0 && X==2)
{
if (닫기[0]<dl){lot=a;}
X=0;
}


if (OrdersTotal() == 0 && 닫기[1]>열기[1])
{
dl=닫기[0];
OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,"",14774,0,Blue);
//------------------------------------------------ --------------------

lot=lot*koef;
X=1;
}

if(OrdersTotal() == 0 && 닫기[1]<열기[1])
{
dl=닫기[0];
OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,"",14774,0,Red);
// 어떤 종류의 haler가 여기에 있어야 합니다 . 아마도 당신이 도울 수 있을 것입니다.
lot=lot*koef;

X=2;
}
}
리턴(0);
//이제 마틴일 뿐입니다.

 

감사합니다. 하지만 두 가지 가격이 있습니다. 하나는 주문 개시 가격 이고 다른 하나는 손절매 가격입니다. 손절매 포인트 수와 포인트 가격은 알려져 있습니다. 그리고 손실이 예를 들어 가격이 정지 손실에 도달하면 보증금의 10%와 같도록 로트 크기를 계산하는 방법은 무엇입니까? 저는 숫자에 약해요.

그리고 나는 아직도 이해하지 못한다.

교차 환율의 경우 달러로 표시되는 핍 값은 다음 공식을 사용하여 계산됩니다.
PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE,
여기서 LOT_SIZE는 로트 크기, TICK_SIZE는 눈금 크기, BASE_QUOTE는 미국 달러에 대한 기본(첫 번째) 통화 의 현재 시세, CURRENT_QUOTE는 해당 쌍의 현재 시세입니다.

미국 달러에 대한 최초의 통화를 이해하는 방법은 무엇입니까?

 

네... 꽉... :-)

미국 달러에 대한 기본(첫 번째) 통화 - GBP 에서 JPY로 - GBP/JPY의 예에서 GBP/USD 가 됩니다.

자본의 양과 손절매의 크기에 따라 거래에서 포지션의 거래량을 계산할 때 필요한 스크립트를 재설계했습니다.

당신에게 필요합니다 - "나는 문제에 부딪쳤고 3 일 동안 나는 고군분투했고 나는 그것을 해결할 수 없었습니다. 완성 된 조언자에서 나는 많은 대신에 % 위험을 입력하기로 결정 했으므로 계산해야합니다. 중지까지의 로트, 예를 들어 창고가 10,000이고 중지가 100pp인 경우 위험은 1%이고 중지가 200이면 로트가 이미 0.05여야 다음을 수행할 수 있습니다. 1%가 같은 수준에 머무를 위험이 있다. 모든 것을 명확하게 설명했으면 좋겠다"고 말했다. 여기에 다음과 같이 씁니다.

" 예를 들어 가격이 손절매에 도달하면 보증금의 10%와 같도록 로트 크기를 계산하는 방법은 무엇입니까? 숫자에 너무 촉박합니다."

일반적으로 나는 교과서에서 로트 계산 기능 을 다시 수정했습니다. 설명과 접근 방식은 동일합니다. 예금 가치의 백분율로 로트를 계산하는 대신 거래 된 로트가 정확히 귀하에 따라 계산됩니다 (제가 제공한 이 예에서 - 위 링크의 스크립트 참조) 조건:

 extern string A0 = "Параметры ММ и мониторинга" ;
extern double Lots = 0 ;           // Стартовый лот = 0 для использования максимального риска на капитал в процентах, в зависимости от величины стоп-лосса
extern int StopLoss = 1000 ;
extern int TakeProfit = 4000 ;       // TakeProfit для новых ордеров (пунктов)
extern    double MaxRisk = 10 ;       // риск на капитал в %
                                   // рассчитываем объем позиции взависимости от размера стопа, при заданном риске
                                   // например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1,
                                   // при стопе 200 пп уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровне

int start()
{    
   //----------------------------------СТАРТ------------------------------------------------------------------------------------- 
 
// ...  

//----------------------------------Расчет объема лота------------------------------------------------------------------------ 
   if (Lot(StopLoss)==false)  
                        {
                           Comment ( " Пополните счет. Не хватает средств на минимальный лот. Советник остановлен." ); // Если средств не хватает на мин, то выход
                           Print   ( "Не хватает средств на минимальный лот. Lots_New = " ,Lots_New, " AccountFreeMargin() = " , AccountFreeMargin ()); 
                                                                                                   // Если средств не хватает на мин, то выход
                           return ( 0 );
                        }  
// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...                          
   Lots_New = NormalizeLots(Lots_New);      

//... здесь условия на открытие поз и установка ордеров

} //------------------------------------------Конец Старт-----------------------------------------------------

//+------------------------------------------------------------------+
//| Нормализация лота                                                |
//+------------------------------------------------------------------+

double NormalizeLots( double lot)
{
   double lotStep = MarketInfo ( Symbol (), MODE_LOTSTEP);
   double lots = NormalizeDouble (lot / lotStep, 0 ) * lotStep;   
   lots = MathMax (lots, MarketInfo ( Symbol (), MODE_MINLOT));
   lots = MathMin (lots, MarketInfo ( Symbol (), MODE_MAXLOT));   
   return (lots);
}

//--------------------------------------------------------------------
// Lot.mqh
// 
//--------------------------------------------------------------- 1 --
// Функция вычисления количества лотов.
// Глобальные переменные:
// double Lots_New - количество лотов для новых ордеров (вычисляется)
// double Lots     - желаемое количество лотов, заданное пользовател.
// double  MaksRisk  - процент риска
// Возвращаемые значения:
// true  - если средств хватает на минимальный лот
// false - если средств не хватает на минимальный лот
//--------------------------------------------------------------- 2 --
bool Lot( int sl)                               // Позовательская ф-ия
  {
   string Symb   = Symbol ();                     // Финансовый инструм.
   double One_Lot= MarketInfo (Symb,MODE_MARGINREQUIRED); //Стоим. 1 лота
   double Min_Lot= MarketInfo (Symb,MODE_MINLOT); // Мин. размер. лотов
   double Max_Lot = MarketInfo ( Symbol (),MODE_MAXLOT);
   double Step   = MarketInfo (Symb,MODE_LOTSTEP); //Шаг изменен размера
   double Free   = AccountFreeMargin ();         // Свободные средства
   double LotVal = MarketInfo ( Symbol (),MODE_TICKVALUE); //стоимость 1 пункта для 1 лота
   

//--------------------------------------------------------------- 3 --
   if (Lots > 0 )                                 // Лоты заданы явно..
     {                                         // ..проверим это
       double Money=Lots*One_Lot;               // Стоимость ордера
       if (Money<= AccountFreeMargin ())           // Средств хватает..
         Lots_New=Lots;                         // ..принимаем заданное
       else                                      // Если не хватает..
         Lots_New= MathFloor (Free/One_Lot/Step)*Step; // Расчёт лотов
     }
//--------------------------------------------------------------- 4 --
   else                                          // Если лоты не заданы
     {                                         // то берём процент 
                                               // Желаем. колич.лотов:
                                               
      Lots_New = MathFloor ((Free*MaxRisk/ 100 )/(sl*LotVal)/Step)*Step;
       if (Lots_New<Min_Lot) Lots_New=Min_Lot;
       if (Lots_New>Max_Lot) Lots_New=Max_Lot;
       Print ( "Lot_New в ф-ии Lots = " ,Lots_New, "ширина канала = " ,sl, "Point  = " , Point );
     }
//--------------------------------------------------------------- 5 --
   if (Lots_New < Min_Lot)                     // Если меньше допуст..
      Lots_New=Min_Lot;                         // .. то миниамальный
   if (Lots_New*One_Lot > AccountFreeMargin ()) // Не хватает даже..
     {                                         // ..на минимальн. лот:(
       Print ( "Не хватает средств на минимальный лот.  Lots_New = " ,Lots_New, " AccountFreeMargin() = " , AccountFreeMargin ());   // Сообщение..
       return (false);                           // ..и выход 
     }
   return (true);                               // Выход из польз. ф-ии
  }
//--------------------------------------------------------------- 6 --
 
Reshetov :
 static int Kvadrat = 0 ;



이 방법을 시도했습니다. 이제 전체 테스트 기간 동안 하나의 보류 중인 STOPLOSS 주문이 열렸습니다. 그게 다야 ... 아마도 내 터미널이 버그가 있습니까?

이론적으로 프로그램은 매일 아침 7시부터 9시까지 높은 가격과 낮은 가격을 찾아 이 수준에서 정지 주문을 해야 합니다.

파일:
 
mamba5 :


이 방법을 시도했습니다. 이제 전체 테스트 기간 동안 하나의 보류 중인 STOPLOSS 주문이 열렸습니다. 그게 다야 ... 아마도 내 터미널이 버그가 있습니까?

그리고 잡지 vlomy에서 주제를 살펴보니 정확히 버그가 무엇인가요?
 

안녕하세요.

기능에 문제가 있는 사람이 있습니까?

 IsDemo ()

?

계정이 실제인지 여부에 관계없이 계정이 실제라는 1개의 결과를 지속적으로 제공합니다.

 
nemo811 :

안녕하세요.

기능에 문제가 있는 사람이 있습니까?

?

계정이 실제인지 여부에 관계없이 계정이 실제라는 1개의 결과를 지속적으로 제공합니다.

데모 계정의 코드와 함께 차트에 고문을 배치했습니다.

 int start()
  {
//----
   if ( IsDemo ()) {
       Print ( "Это демо" );
       return ( 0 );
   }
   Print ( "Это не демо" );
   
//----
   return ( 0 );
}
잡지에 "이것은 데모입니다."라고 씁니다.
 
Reshetov :

데모 계정의 코드와 함께 차트에 고문을 배치했습니다.

잡지에 "이것은 데모입니다."라고 씁니다.

나는 fibogroups에 대한 데모를 가지고 있습니다. 신비한 이유로 내가 실생활에 있다고 말합니다. 묘사된 버전에서 - 이것은 데모가 아닙니다.

DC 자체가 어떻게 든 변태 된 것으로 밝혀졌습니다.

 
nemo811 :

나는 fibogroups에 대한 데모를 가지고 있습니다. 신비한 이유로 내가 실생활에 있다고 말합니다. 묘사된 버전에서 - 이것은 데모가 아닙니다.

DC 자체가 어떻게 든 변태 된 것으로 밝혀졌습니다.

일부 브로커는 데모와 실제 모두에 대해 하나의 서버를 할당합니다. 브로커의 지원에서 지정하십시오.
 
Reshetov :
일부 브로커는 데모와 실제 모두에 대해 하나의 서버를 할당합니다. 브로커의 지원에서 지정하십시오.

고맙습니다.