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

 
Roger :
최고점과 최저점을 0 막대에서 계산하지 않고 첫 번째 막대에서 0 막대에서 입찰가는 최소값보다 작을 수 없습니다.
즉 i=1입니다. ? Bid and Ask를 만지지 마십시오?
 
eugggy :
더블
최소=입찰가, 변수 선언

최대=입찰가,

__________________________________________________________________________________________________________

(i=0;i<=20-1;i++) 여는 기준

{
(낮음[i]<최소) 최소=낮음[i]인 경우:
if (High[i]>Max) Max=High[i];

}

if (...&&Ask>최대)

{

Opn_B=참; // 구매 열기

}

경우(................&&Bid<Min)

{

Opn_S=참; // 오픈 판매

}

__________________________________________________________________________________________________________

이렇게 보기 흉한 형태로 되어 있어서 아쉽습니다. 코드가 작동하지 않아 삭제해서 메모리에서 작성해야 했습니다. 그러나 당신은 전문가로서 명확해야 합니다(희망합니다).

__________________________________________________________________________________________________________

당신은 나를 아첨 :)) 나는 당신과 같은 초보자입니다 ...

extremumprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int   Quant_Bars  = 30 ;                     // Количество баров
bool         OpnBuy      = false ,
            OpnSell     = false ;
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int i;                                       // Номер бара 
   double Minimum=Bid,                           // Минимальная цена
          Maximum=Bid;                           // Максимальная цена
 
   for (i= 0 ;i<=Quant_Bars- 1 ;i++)                 // От нуля (!) до..
     {                                           // ..Quant_Bars-1 (!)
       if (Low[i]< Minimum)                       // Если < известного
         Minimum=Low[i];                         // то оно и будет мин
       if (High[i]> Maximum)                     // Если > известного
         Maximum=High[i];                       // то оно и будет макс
     }
//--------------------------------------------------------------------

   if (iOpen(NULL, 0 , 1 )>Maximum)
      {
         OpnBuy = true :
         OpnSell= false ;
      }
   if (iOpen(NULL, 0 , 1 )<Minimum)
      {
         OpnSell= true ;
         OpnBuy = false :
      }   
//-------------------------------------------------------------------
//  А тут код открытия позиций.  if (OpnBuy)  {открываем Бай};
//                               if (OpnSell) {открываем Селл};
// Но обязательно нужно сделать проверку на существование уже открытой позиции,
// иначе они будут открываться на каждом тике пока присутствует сигнал...
   return ;                                       // Выход из start()
  }
//--------------------------------------------------------------------
그런 곳. 나는 그것을 확인하지 않았으므로 불도저에서 무릎에 썼습니다 ...
 
artmedia70 :

글쎄요, 논리는 다음과 같습니다.

1. 101이라고 가정해 봅시다. 그리고 주문을 포지션으로 변환하기 위한 플래그를 재설정합니다. ConvOrd=false라고 가정해 봅시다.

2. 매직 101이 있는 위치가 있는지 확인하고, 있으면 변환 플래그를 설정하십시오. ConvOrd=true;

3. ConvOrd가 true인지 확인하고 ConvOrd==true인지 확인합니다.
매직 101로 위치의 존재를 확인하고 존재하지 않는 경우 -
이미 닫혀있다는 뜻입니다.

{플래그 재설정 ConvOrd=false; 새로운 지연 설정;}

플래그없이 할 수 있다고 생각합니다 ...


논리는 명확하지만 코드에서 구현하는 방법을 모르겠습니다. 많은 옵션을 시도했지만 성공하지 못했습니다. 찻주전자인 것 같아요. 그것이 내가 여기에 쓴 이유입니다. 663페이지에서 내 코드를 보여주었습니다. 욕망이 있다면 - 끝내거나 적어도 그것을 끝내는 방법을 더 구체적으로 알려주십시오. 고맙습니다.
 
artmedia70 , Roger 님, 도움을 주셔서 감사합니다. 알아낸 것 같은데, 실제로 0번째 막대의 가격은 최소값과 최대값보다 낮거나 높을 수 없습니다. 생각하지 않고 Ask를 Min 변수의 값으로 추가했는데 이제 작동하는 것 같습니다. artmedia70 , 나에 비해 대부분의 전문가))). 다시 한번 감사합니다.
 
dimon74 :
논리는 명확하지만 코드에서 구현하는 방법을 모르겠습니다. 많은 옵션을 시도했지만 성공하지 못했습니다. 찻주전자인 것 같아요. 그것이 내가 여기에 쓴 이유입니다. 663페이지에서 내 코드를 보여주었습니다. 욕망이 있다면 - 끝내거나 적어도 그것을 끝내는 방법을 더 구체적으로 알려주십시오. 고맙습니다.

SellStop 주문을 할 때 더 간단하게 시도하고 TakeProfit 값을 기억하고 입찰가가 이 가격 아래로 떨어지면 Buy에 두십시오.
 
Roger :

SellStop 주문을 할 때 더 간단하게 시도하고 TakeProfit 값을 기억하고 입찰가가 이 가격 아래로 떨어지면 Buy에 두십시오.
조언 해주셔서 감사합니다! 이미 이 옵션을 시도했지만 내 전략을 구현하는 데 적합하지 않습니다.
 
dimon74 :
조언 해주셔서 감사합니다! 이미 이 옵션을 시도했지만 내 전략을 구현하는 데 적합하지 않습니다.
저를 용서하십시오, 프로이지만 여전히 Igor Kim의 유용한 기능 목록을 제공합니다. 직접보고 디자인하십시오 ... :)
파일:
 

왜 한 번에 두 개의 잠금 위치를 설정하는지 이해조차 되지 않습니다. 논리는 이렇습니다.

자기 자본이 이전 가치에서 이익의 특정 비율에 도달하면 모든 포지션을 닫습니다... 원래대로 작동합니다... 자세히...

자산이 이전 가치의 일정 비율만큼 감소하면 가장 큰 손실을 입은 포지션을 찾아 그것이 누구인지 결정합니다... 글쎄요, 거기에서 매수 또는 매도

이중 로트로 반대 방향으로 잠금 위치를 엽니다. 다음으로, 우리는 그들의 총 이익(손실 및 잠금)을 살펴보고 더 커지는 즉시,

글쎄, 10 점이라고 가정 해 봅시다. nafig를 닫으십시오 ...

사물의 논리에 따르면 다음 틱에서 형평성을 먼저 확인하고 모든 것이 정상이면 작업을 계속합니다. 선생님... 모든 것이 다시 나빠지면 다음 엘크를 찾습니다. ..

그러나 어떤 이유로 그는 한 번에 두 개의 잠금 장치를 엽니 다 ... 매수와 매도 모두, 또한 로트가 0.1이면 첫 번째 잠금 장치가 이중 로트 = 0.2로 열립니다.

그리고 두 번째 것은 그것을 다시 두 배로 늘리고 이미 많은 0.4로 열립니다 ... 따라서 그들이 지금 태양 아래의 장소를 위해 서로 싸우고 있다면 여기에서 자물쇠가 무엇입니까 ... :(

코드를 첨부하고 있습니다. 누군가가 내 손가락으로 나를 찌를 수도 있습니다.

 //----------------- Закрытие позиций если эквити выросло на N процентов ---------------------------
            
   if (Equ_NEW>=Equ_OLD+EquPerc)                       // Новое эквити больше старого на процент прибыли..
   {                                         
//      ClosePosBySizeLossInCurrency(NULL, -1, -1, 0); // Закрытие всех убыточных позиций
      ClosePosFirstProfit( NULL , - 1 , - 1 );           // Закрываем все позиции, сначала прибыльные
      DeleteOrders( NULL , - 1 , - 1 );                   // Удаляем ордера
      Equ_NEW=AccountEquity();                     // Запоминаем новое значение эквити
      Equ_OLD=Equ_NEW;                             // и вписываем его в "старое"
      CountClsEQU++;                               // Увеличиваем счётчик кол-ва закрытий для ф-ции вывода информации
      LockBuy51 =true;                             // Разрешаем открытие локирующих
      LockSell51=true;                             // позиций Buy и Sell
      OpnBuy51  =true;                             // и вообще разрешаем открываться
      OpnSell51 =true;                             // в любую сторону... 
   }

//------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------
               
   if (Equ_NEW<=Equ_OLD-EquPerc/ 2 )                 // Новое эквити меньше старого на столько-то процентов...
      {                                         
         Trade=false;                               // Запрещаем торговлю
//-------------- Закрытие двух позиций, если ранее был установлен лок на убыточную ------------- 
        
         if ( OrderSelect (TicketLoss, SELECT_BY_POS, MODE_TRADES))     // Выбираем убыточную позицию (если её тикет
            {                                                         // ранее был сохранён в TicketLoss)
               double prloss=OrderProfit()+OrderSwap();               // Размер профита убыточной позиции
               int typeloss =OrderType();                             // Тип убыточной позиции
               int mnloss   =OrderMagicNumber();                     // Magic убыточной позиции
            }
         if ( OrderSelect (TicketLock, SELECT_BY_POS, MODE_TRADES))     // Выбираем локирующую позицию (если её тикет
            {                                                         // ранее был сохранён в TicketLock)
               double prlock=OrderProfit()+OrderSwap();               // Размер профита локирующей позиции
               int typelock =OrderType();                             // Тип локирующей позиции
            }
         if (prloss+prlock>= 10 * Point )                                 // Если их суммарный профит больше 10 пунктов
            {
               ClosePositions( NULL , typelock, 5100 );           // Закрываем локирующую позицию
               ClosePositions( NULL , typeloss, mnloss);         // Закрываем убыточную позицию
            }
//--------------- Поиск убыточной позиции и установка локирующей -------------------------  
       
         double Loss= 0 ;                                         // Последнее значение убытка
         int     i, k= OrdersTotal (), OrdTicket=- 1 ;

         for (i=k- 1 ; i>= 0 ; i--) {                               // Цикл по всем ордерам терминала
             if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
               if ((OrderProfit()+OrderSwap()< 0 )) {             // Если профит позиции меньше 0
                   if (Loss>OrderProfit()+OrderSwap()) {         // Если последнее значение убытка больше убытка позиции  
                     Loss=OrderProfit()+OrderSwap();           // Значит тут убыток больше, запоминаем как последнее
                     OrdTicket=i;                               // Запоминаем номер убыточной позиции
                  }
               }
            }
         }
             if (OrdTicket>= 0 ) {
               if ( OrderSelect (OrdTicket, SELECT_BY_POS, MODE_TRADES)) {   // Выбираем позицию по тикету
                  TicketLoss=OrdTicket;                                     // Запоминаем как тикет убыточной позы
                   if (OrderType()==OP_BUY)                                 // Если её тип Бай
                     {
                        Magic= 5100 ;                                               // Задаём магик... 
                        New_Comm= "Sell_M5_Стратегия_1_Локирующая позиция" ;       // Задаём комментарий для позиции
                        Lots_New=NormalizeLot(OrderLots()* 2 , False, NULL );       // Увеличим лот в два раза
                         if (!ExistPositions( NULL , OP_SELL, 5100 , 0 )){             // Если нет локирующего Sell
                        OpenPosition( NULL ,OP_SELL,Lots_New, 0 ,pb-tp* 100 *po,Magic,New_Comm);} // Открываем локирующий...
                         if (ExistPositions( NULL , OP_SELL, 5100 , 0 ))               // Проверяем, заодно и выбираем её
                              {TicketLock=OrderTicket();}                         // Сохраняем тикет локирующего Sell
                     }
                   if (OrderType()==OP_SELL)
                     {
                        Magic= 5100 ;                                               // Задаём магик... 
                        New_Comm= "Buy_M5_Стратегия_1_Локирующая позиция" ;         // Задаём комментарий для позиции
                        Lots_New=NormalizeLot(OrderLots()* 2 , False, NULL );       // Увеличим лот в два раза
                         if (!ExistPositions( NULL , OP_BUY, 5100 , 0 )){             // Если нет локирующего Buy
                        OpenPosition( NULL ,OP_BUY,Lots_New, 0 ,pa+tp* 100 *po,Magic,New_Comm);} // Открываем локирующий...
                         if (ExistPositions( NULL , OP_BUY, 5100 , 0 ))               // Проверяем, заодно и выбираем её
                              {TicketLock=OrderTicket();}                         // Сохраняем тикет локирующего Buy
                     }
               }
            }
         }

으로 시작하는

 //------------- Включение вывода убыточных позиций в ноль, если эквити упало на N процентов -----------------------

어딘가에 잼이 살고 있습니다 ...

 

페이지 번호 " 666 " :-)

 
끔찍... 와우!!!