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

 
 if ((Opb== 0 ) && (MA_1_t > MA_2_t + Rastvor*Point))           // Если разница между
     {                                           // ..МА 1 и 2 большая
      Opn_B= true ;                               // Критерий откр. Buy
      Cls_S= true ;                               // Критерий закр. Sell
      Opb++;					// Открытие только одного ордера
      Ops= 0 ;
         if (VKO1>=Ask) {VP=VP*Koff;} 		// При прибыли предыдущего умножать на коэф.
         if (VKO1<Ask) {VP=VP*Koff1;}		// При убытке предыдущего умножать на коэф1.
      }
 if ((Ops== 0 ) && (MA_1_t < MA_2_t - Rastvor*Point))           // Если разница между
     {                                           // ..МА 1 и 2 большая
      Opn_S= true ;                               // Критерий откр. Sell
      Cls_B= true ;                               // Критерий закр. Buy
      Ops++;					// Открытие только одного ордера
      Opb= 0 ;
         if (VKO0<=Bid) {VP=VP*Koff;} 		// При прибыли предыдущего умножать на коэф
         if (VKO0>Bid) {VP=VP*Koff1;}		// При убытке предыдущего умножать на коэф1
      }
      
if ((Opn_S== true )||(Opn_B== true ))      		// Если есть сигнал на открытие ордера
      {						// Вычисляем объем умножая на VP
       if (AccountBalance()< 50000 ) Vol=Opn_Lots*VP;
       if (AccountBalance()> 50000 ) Vol=2*Opn_Lots*VP;
      }
오류가 어디 있는지 알 수 없습니다. 도와주세요. "Lts=1.#INF를 사기에 돈이 충분하지 않습니다"라고 표시됨
 

그리고 보증금이 충분한지 확인하려면? https://docs.mql4.com/en/constants/marketinfo

그리고 배기에 제비를 확인?

 

이것이 전체 문제입니다... 로트의 수가 무한대로 늘어납니다. 즉. 볼륨 증가가 반복되고 코드가 일회성 증가로 나타납니다 ...

명확하게하기 위해 다음을 참조하십시오. 아래를 참조하십시오. 따라서 Sell과 동일합니다.

 if (Total== 0 && Opn_B==true)         // Открытых орд. нет  
            {                                   // критерий откр. Buy
             RefreshRates ();                     // Обновление данных
                                  
            Min_Lot= MarketInfo (Symb,MODE_MINLOT);   // Миним. колич. лотов 
            Free   = AccountFreeMargin ();           // Свободн средства
            One_Lot= MarketInfo (Symb,MODE_MARGINREQUIRED); // Стоимость 1 лота
            Step   = MarketInfo (Symb,MODE_LOTSTEP); // Шаг изменен размера
            Lts= MathFloor (Vol);                     // Для открытия 
             Alert ( "Lts " , Lts);
             if (Lts < Min_Lot) Lts=Min_Lot;         // Не меньше минимальн
             if (Lts*One_Lot < Free) Alert ( " Не хватает денег на " , Lts, " лотов" ); // Лот дороже свободн.
            
            SL=Ask-StopLoss_Open* Point ;             // Вычисление SL откр.
            TP=Ask+TakeProfit_Open* Point ;           // Вычисление TP откр.
             Alert ( "Попытка открыть Buy. Ожидание ответа.." );
            Ticket= OrderSend (Symb,OP_BUY,Lts,Ask, 2 ,SL,TP); //Открытие Buy
             if (Ticket > 0 )                         // Получилось :)
                {
                 Alert ( "Открыт ордер Buy " ,Ticket);
                VKO0=Ask; Opn_B =false; KO++;
                 Alert ( "Цена открытия =" , VKO0);
                }
             
            
             if (Fun_Error( GetLastError ())== 1 )   // Обработка ошибок
             continue ;                           // Повторная попытка
                                         
            }
 
             continue ;                           // Повторная попытка

이른바 '일회용'인가요?

캡, 분명히 사이클이 있습니다.

 
sergeev, 분명히 당신 자신은 그다지 똑똑하지 않습니다 .. 이것은 열 때 오류가 발생하면 로트 수를 늘리지 않는 사이클입니다.
 

안녕하세요!

이 질문에 대한 답을 찾지 못한 것 같습니다.

보류 중인 주문 이 채워지면 해당 유형이 여전히 보류 중인 주문 유형으로 유지됩니까? 아니면 OP_BUY 또는 OP_SELL로 변경됩니까?

 
oDin48 :

이것이 전체 문제입니다... 로트의 수가 무한대로 늘어납니다. 즉. 볼륨의 증가는 반복되고 코드는 일회성 증가를 초래합니다 ...

명확하게하기 위해 다음을 참조하십시오. 아래를 참조하십시오. 따라서 Sell과 동일합니다.

노력하다
 if (Fun_Error( GetLastError ())== 0 )   // Нет ошибки
break ; 
오류가 있는 경우 새 틱에서 위치를 다시 열려고 시도합니다. 그건 그렇고, 그들은 이 포럼(pp. 90-91)에서 저에게 if에서 &&(and) 연산자를 사용하지 않는 것이 바람직하다고 설명했습니다.
 
gogent :

보류 중인 주문이 채워지면 해당 유형이 여전히 보류 중인 주문 유형으로 유지됩니까? 아니면 OP_BUY 또는 OP_SELL로 변경됩니까?

물론 변화.
 

포인트 수를 통화로 변환하는 방법을 아는 사람이 있습니까?

저것들. 이익이 통화 단위인 경우 50포인트를 이 단위로 변환해야 합니다.

 

paladin80, 문제는 주문을 시작하지 않는 것입니다... 잘 작동합니다... 05/01/12 19:15 일자 게시물에서 어떤 변수가 더 사용되는지 명확히 하기 위해 이 부분을 건너뛰었습니다...

문제는 이것이(아래 참조) 일회성 실행이지만 어떤 이유로 Vol이 무한대로 증가하므로 Lts가 무한대로 증가한다는 것입니다 ... 이것은 명확하지 않습니다 ... 문제의 게시물을보고 다음과 같이 말하십시오. 무슨 일이야...

 if ((Opn_S== true )||(Opn_B== true ))               // Если есть сигнал на открытие ордера
      {                                         // Вычисляем объем умножая на VP
       if (AccountBalance()< 50000 ) Vol=Opn_Lots*VP;
       if (AccountBalance()> 50000 ) Vol= 2 *Opn_Lots*VP;
      }