포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 486

 
evillive :

숫자 108을 사용하면 최대값을 151 - 108 ^ 151 \u003d 1.11426138071861e + 307의 거듭제곱으로 높일 수 있습니다.

108^152=1.20340229117609e+309 - 108^4096은 말할 것도 없고 MKL로 프로그래밍하기에는 이미 너무 많습니다.

그러한 저울은 어떤 종류의 계산이 필요했습니까?


가격 움직임 분석과 NLP 주의 관리를 통합하려고 하는데 두뇌가 자동 조종됩니다 :)
 
alex12 :
가격 움직임 분석과 NLP 주의 관리를 통합하려고 하는데 두뇌가 자동 조종됩니다 :)
깨달음을 찾기 위해 가장 중요한 것은 너무 멀리 날지 않도록 올바른 물질을 선택하는 것입니다
 

MQL4를 배우기 시작했는데 주문이 어떻게 선택되었는지 알 수 없습니다.

튜토리얼에서:

for(int i=1; i<=OrdersTotal(); i++) // 순서를 통해 루프

{

if (OrderSelect(i-1,SELECT_BY_POS)==true) // 다음이 있는 경우

{

if (OrderSymbol()!= Symb) 계속;

나는 이것을 이해합니다: i=1인 동안 i<= 주문 수

i-1 위치에 선택된 주문(주문 번호 0)이 있는 경우

기호로 비교

그런 다음 i에 1(i++)을 추가하고 새 반복을 시작합니다.

댓글이 이해가 안가네요 // 다음이 있다면 (다음은 무슨 뜻인가요: 다음 위치 또는 현재 선택 중인 이 순서?)

러시아어로 설명해주세요.

 
영장이 있는 경우 vvilu가 있었을 것입니다. 숫자 i-1 아래에 존재하면 다음 조건으로 넘어갑니다.
 
Vladon :
영장이 있는 경우 vvilu가 있었을 것입니다. 숫자 i-1 아래에 존재하면 다음 조건으로 넘어갑니다.

항상 0(및 -1)에서 주문을 찾습니다. "다음" 순서를 결정하는 거친 방법은 정말 오해의 소지가 있습니다...
 
설명 감사합니다.
 
evillive :

항상 0(및 -1)에서 주문을 찾습니다. "다음" 순서를 결정하는 거친 방법은 정말 오해의 소지가 있습니다...


주문이 없으면이 구성으로 :

 for ( int i= 1 ; i<= OrdersTotal (); i++) // Цикл перебора ордер

{

if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий

{ 

if ( OrderSymbol ()!= Symb) continue ;

다음 조건으로 이동하지 않습니다.

주문이 없기 때문에 and-1(우리의 경우 = 0)

물론 그렇게 쓰는 것은 관례가 아니며 왜 그런지는 분명하지 않습니다.

이건 아니야:

 for ( int i= 0 ; i< OrdersTotal (); i++) // Цикл перебора ордер

{

if ( OrderSelect (i, SELECT_BY_POS )== true ) // Если есть следующий

{ 

if ( OrderSymbol ()!= Symb) continue ;
 

안녕 신사 여러분, 질문이 있습니다. 계정 잔액 의 백분율을 마감하는 코드의 일부를 가르칠 수 없습니다. 그것은 닫히지만 백분율은 아니지만 시장에 있는 모든 주문과 동시에 특정 주문을 닫고 예치금 잔액의 백분율을 계산해야 합니다. 제가 뭘 잘못하고 있는 건가요?


외부 이중 백분율 = 2.0;
extern int 미끄러짐 = 2;
이중 정지;

무효 OnStart()
{

if (숫자 == 3 || 숫자 == 5)
{
미끄러짐 *= 10;
}

for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
{
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
if(stop==AccountBalance()/100*퍼센트)
stop=AccountBalance()/100*퍼센트;
if(중지<=계정 잔액())
{
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Aqua);
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Aqua);
}//if(ostop<=AccountBalance())
}//if(ostop==AccountBalance()/100*퍼센트)
}//if (OrderSymbol() == Symbol() )
}//if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
}//for(int i = OrdersTotal()-1; i>=0; i--)
반품;
}//OnStart() 무효화
//+----------------------------------------------- ------------------

 
OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage,Aqua);
OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage,Aqua);

방법 것입니다?

이:

 if (stop== AccountBalance ()/ 100 *Percent)
stop= AccountBalance ()/ 100 *Percent;

결코 충족되지 않는다

그 이유는 다음과 같습니다.

 if (stop<= AccountBalance ())

항상 모든 주문에 대해 작동합니다.

결론: 모든 것이 잘못되었습니다.

귀하의 기능에 대해 깊이 생각해 볼 필요가 있습니다. 빠른 답변이 없습니다.

하지만 시작하기 위해:

 extern double Percent = 2.0 ;
extern int Slippage = 2 ;
double stop;

void OnStart ()
{

if ( Digits == 3 || Digits == 5 )
{
Slippage *= 10 ;
}

for ( int i = OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
{
if ( OrderSymbol () == Symbol ()) 
{
if ( OrderType () == OP_BUY || OrderType () == OP_SELL )
{
if ( OrderProfit ()>= AccountBalance ()/ 100 *Percent)

{
if ( OrderType () == OP_SELL ) OrderClose ( OrderTicket (), OrderLots (), Ask ,Slippage,Aqua);
if ( OrderType () == OP_BUY ) OrderClose ( OrderTicket (), OrderLots (), Bid ,Slippage,Aqua);
} //if(ostop<=AccountBalance())
} //if(ostop==AccountBalance()/100*Percent)
} //if (OrderSymbol() == Symbol() )
} //if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
} //for(int i = OrdersTotal()-1; i>=0; i--)
return ;
} //void OnStart()
//+-----------------------------------------------------------------
 
Vladon :


주문이 없으면이 구성으로 :

다음 조건으로 이동하지 않습니다.

주문이 없기 때문에 and-1(우리의 경우 = 0)

물론 그렇게 쓰는 것은 관례가 아니며 왜 그런지는 분명하지 않습니다.

이건 아니야:


네, 저도 읽으면서 바로 i=0으로 하면 안되는거 아닌가 하는 생각도 들더군요.

여기 스크립트의 전체 코드가 있습니다. 작성자가 i=1이 아닌 i=1을 쓴 데는 합당한 이유가 있을 수 있습니다. 저는 이 정도를 이해하지 못하고 그냥 볼 수는 없지만 필요합니다. 나중에 질문이 없도록 작업 메커니즘을 이해합니다.

 // closeorder.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                                     // Спец.функция start
  {
   string Symb= Symbol ();                         // Финанс. инструмент
   double Dist= 1000000.0 ;                       // Предустановка
   int Real_Order=- 1 ;                           // Пока рыночных нет
   double Win_Price= WindowPriceOnDropped ();     // Здесь брошен скрипт
//--------------------------------------------------------------- 2 --
   for ( int i= 1 ; i<= OrdersTotal (); i++)           // Цикл перебора ордер
     {
       if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) // Если есть следующий
        {                                       // Анализ ордеров:
         //------------------------------------------------------ 3 --
         if ( OrderSymbol ()!= Symb) continue ;     // Не наш фин.инструм.
         int Tip= OrderType ();                   // Тип ордера
         if (Tip> 1 ) continue ;                   // Отложенный ордер  
         //------------------------------------------------------ 4 --
         double Price= OrderOpenPrice ();         // Цена ордера
         if ( NormalizeDouble ( MathAbs (Price-Win_Price), Digits )< //Выбор
             NormalizeDouble (Dist, Digits ))       // самого близкого орд       
           {
            Dist= MathAbs (Price-Win_Price);       // Новое значение
            Real_Order=Tip;                     // Есть рыночный ордер
             int Ticket= OrderTicket ();           // Номер ордера
             double Lot= OrderLots ();             // Количество лотов
           }
         //------------------------------------------------------ 5 --
        }                                       //Конец анализа ордера
     }                                           //Конец перебора орд.
//--------------------------------------------------------------- 6 --
   while ( true )                                   // Цикл закрытия орд.
     {
       if (Real_Order==- 1 )                       // Если рыночных нет
        {
         Alert ( "По " ,Symb, " рыночных ордеров нет" );
         break ;                                 // Выход из цикла закр        
        }
       //--------------------------------------------------------- 7 --
       switch (Real_Order)                         // По типу ордера
        {
         case 0 : double Price_Cls= Bid ;           // Ордер Buy
             string Text= "Buy " ;                 // Текст для Buy
             break ;                               // Из switch
         case 1 : Price_Cls= Ask ;                 // Ордер Sell
            Text= "Sell " ;                       // Текст для Sell
        }
       Alert ( "Попытка закрыть " ,Text, " " ,Ticket, ". Ожидание ответа.." );
       bool Ans= OrderClose (Ticket,Lot,Price_Cls, 2 ); // Закрытие ордера
       //--------------------------------------------------------- 8 --
       if (Ans== true )                             // Получилось :)
        {
         Alert ( "Закрыт ордер " ,Text, " " ,Ticket);
         break ;                                 // Выход из цикла закр
        }
       //--------------------------------------------------------- 9 --
       int Error=GetLastError();                 // Не получилось :(
       switch (Error)                             // Преодолимые ошибки
        {
         case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
             RefreshRates ();                     // Обновим данные
             continue ;                           // На след. итерацию
         case 136 : Alert ( "Нет цен. Ждём новый тик.." );
             while ( RefreshRates ()== false )         // До нового тика
               Sleep ( 1 );                         // Задержка в цикле
             continue ;                           // На след. итерацию
         case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
             Sleep ( 500 );                         // Простое решение
             RefreshRates ();                     // Обновим данные
             continue ;                           // На след. итерацию
        }
       switch (Error)                             // Критические ошибки
        {
         case 2 : Alert ( "Общая ошибка." );
             break ;                               // Выход из switch
         case 5 : Alert ( "Старая версия клиентского терминала." );
             break ;                               // Выход из switch
         case 64 : Alert ( "Счет заблокирован." );
             break ;                               // Выход из switch
         case 133 : Alert ( "Торговля запрещена" );
             break ;                               // Выход из switch
         default : Alert ( "Возникла ошибка " ,Error); //Другие варианты   
        }
       break ;                                     // Выход из цикла закр
     }
//-------------------------------------------------------------- 10 --
   Alert ( "Скрипт закончил работу -----------------------------" );
   return ;                                       // Выход из start()
  }