MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 324

 

맞나요??

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

{

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

{

int OT=주문 총계; //터미널에서 열린 주문 수

이중 가격=OrderOpenPrice(); // 선택한 주문의 가격

더블 마스[가격][OT]; //모든 주문을 주문하기 위한 배열

또는

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

{

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

{

이중 가격=OrderOpenPrice(); // 선택한 주문의 가격

더블 마스[가격]; // 모든 주문을 가격으로 주문하기 위한 배열?

 
vikzip :

맞나요??

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

{

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

{

int OT=주문 총계; //터미널에서 열린 주문 수

이중 가격=OrderOpenPrice(); // 선택한 주문의 가격

더블 마스[가격][OT]; //모든 주문을 주문하기 위한 배열

또는

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

{

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

{

이중 가격=OrderOpenPrice(); // 선택한 주문의 가격

더블 마스[가격]; // 모든 주문을 가격으로 주문하기 위한 배열?

1. OrdersTotal은 총 주문 수를 반환하지만 0부터 번호가 매겨집니다. 따라서 루프는 i < OrdersTotal()이어야 합니다.

2. 배열은 미리 double Mas[];로 선언해야 합니다. 주문을 성공적으로 선택하면 총 몇 개인지 알 수 없기 때문에 배열의 크기를 늘려야 합니다...

3. 대괄호는 배열 문자열의 인덱스를 포함해야 합니다. 매스[i] = 가격;

결과적으로 두 옵션 모두 잘못되었습니다.

 
Alexey Viktorov :

1. OrdersTotal은 총 주문 수를 반환하지만 0부터 번호가 매겨집니다. 따라서 루프는 i < OrdersTotal()이어야 합니다.

2. 배열은 미리 double Mas[];로 선언해야 합니다. 주문을 성공적으로 선택하면 총 몇 개인지 알 수 없기 때문에 배열의 크기를 늘려야 합니다...

3. 대괄호는 배열 문자열의 인덱스를 포함해야 합니다. 매스[i] = 가격;

결과적으로 두 옵션 모두 잘못되었습니다.


정말 감사합니다!

 
Alexey Viktorov :

1. OrdersTotal은 총 주문 수를 반환하지만 0부터 번호가 매겨집니다. 따라서 루프는 i < OrdersTotal()이어야 합니다.

2. 배열은 미리 double Mas[];로 선언해야 합니다. 주문을 성공적으로 선택하면 총 몇 개인지 알 수 없기 때문에 배열의 크기를 늘려야 합니다...

3. 대괄호는 배열 문자열의 인덱스를 포함해야 합니다. 매스[i] = 가격;

결과적으로 두 옵션 모두 잘못되었습니다.


이 경우 주문 가격의 1차원 배열이 있습니까?

이중 가격=OrderOpenPrice(); // 선택한 주문의 가격

이중 Mas[i] = 가격; //모든 주문을 주문하기 위한 배열

for(int i=1; i<OrdersTotal();) // 주문을 반복합니다.

{

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

나는 ++;

}

 
vikzip :

이 경우 주문 가격의 1차원 배열이 있습니까?

이중 가격=OrderOpenPrice(); // 선택한 주문의 가격

이중 Mas[i] = 가격; //모든 주문을 주문하기 위한 배열

for(int i=1; i<OrdersTotal();) // 주문을 반복합니다.

{

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

나는 ++;

}

아니요. 다소 이렇습니다.
   double Price;               // Цена выбранного ордера
   double Mas[];                       //массив для упорядочивания всех ордеров
   for ( int i= 0 ; i< OrdersTotal (); i++;)           // Цикл перебора ордер
   {
     if ( OrderSelect (i, SELECT_BY_POS ) == true ) // Если есть следующий
     {
       ArrayResize (Mas, ArraySyze()+ 1 );
      Mas[i] = OrderOpenPrice ();
// или 
//    Price= OrderOpenPrice ();
//    Mas[i] = Price;
     }
   }

강조 표시된 ==true는 생략할 수 있습니다.

 
Alexey Viktorov :
아니요. 다소 이렇습니다.

강조 표시된 ==true는 생략할 수 있습니다.


정말 감사합니다!

 
안녕하세요, 통화로 이익을 선택하는 라인이 있습니다. 나는 1) 고문의 설정에서 고정 이익(이미 있는 그대로) 또는 보증금의 일부를 백분율로 선택할 수 있기를 원합니다. 방법을 알려주세요.
원래 줄은 다음과 같습니다.

외부 이중 이익 = 10;

2) 선택한 계정 잔액에 따라 이익 자동 계산이 켜지고 꺼지도록 합니다.

결과:
이익: 고정/자동 계산
수정 - 금액.
자동 계산 - 잔액 비율
자동 계산 활성화 - 이익(%)
자동 계산 비활성화 - 손실(%)
자동계산의 손익을 계산할 값 선택 -
 

안녕하세요. 각 바에서 보류 중인 주문 을 닫고 여는 방법을 알려주십시오. 해당 주문이 열릴 때까지 열고 기다려야 합니다.

 //+------------------------------------------------------------------+
//|                                                e-News-Lucky$.mq4 |
//|                                                   Lucky$ & KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|   24.10.2005                                                     |
//| Выставление ордеров в определённое время на пробой диапазона.    |
//| Если ни один ордер не сработал, то модификация на каждом баре.   |
//+------------------------------------------------------------------+
#property copyright "Lucky$ & KimIV"
#property link        "http://www.kimiv.ru"
#define   MAGIC     123

//------- Внешние параметры советника --------------------------------
extern string _Parameters_Trade = "----- Параметры торговли" ;
extern double Lots           = 0.01 ;     // Размер торгуемого лота
extern int     StopLoss       = 0 ;       // Размер фиксированного стопа
extern int     TakeProfit     = 0 ;       // Размер фиксированного тэйка
extern string TimeSetOrders  = "10:30" ; // Время установки ордеров
extern string TimeDelOrders  = "22:30" ; // Время удаления ордеров
extern string TimeClosePos   = "22:30" ; // Время закрытия позиций
extern int     DistanceSet    = 200 ;       // Расстояние от рынка
extern bool    UseTrailing    = True ;     // Использовать трал
extern bool    ProfitTrailing = True ;     // Тралить только профит
extern int     TrailingStop   = 25 ;       // Фиксированный размер трала
extern int     TrailingStep   = 5 ;       // Шаг трала
extern int     Slippage       = 3 ;       // Проскальзывание цены

extern string _Parameters_Expert = "----- Параметры советника" ;
extern string Name_Expert   = "e-News-Lucky$" ;
extern bool    UseSound      = True ;         // Использовать звуковой сигнал
extern string NameFileSound = "expert.wav" ; // Наименование звукового файла
extern color   clOpenBuy     = LightBlue;     // Цвет открытия покупки
extern color   clOpenSell    = LightCoral;   // Цвет открытия продажи
extern color   clModifyBuy   = Aqua;         // Цвет модификации покупки
extern color   clModifySell  = Tomato;       // Цвет модификации продажи
extern color   clCloseBuy    = Blue;         // Цвет закрытия покупки
extern color   clCloseSell   = Red;           // Цвет закрытия продажи

//---- Глобальные переменные советника -------------------------------
int prevBar;

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
void deinit() {
   Comment ( "" );
}

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
   if ( TimeToStr ( CurTime (), TIME_MINUTES )==TimeSetOrders) SetOrders();
   if (prevBar!= Bars && ExistOrder( 1 ) && ExistOrder( 2 )) ModifyOrders();
  DeleteOppositeOrders();
  TrailingPositions();
   if ( TimeToStr ( CurTime (), TIME_DATE )==TimeDelOrders) DeleteAllOrders();
   if ( TimeToStr ( CurTime (), TIME_MINUTES )==TimeClosePos) CloseAllPositions();
  prevBar= Bars ;
}

//+------------------------------------------------------------------+
//| Установка ордеров                                                |
//+------------------------------------------------------------------+
void SetOrders() {
   double ldStop= 0 , ldTake= 0 ;
   int     spr= MarketInfo ( Symbol (), MODE_SPREAD );
   double pAsk= Ask +(DistanceSet+spr)* Point ;
   double pBid= Bid -DistanceSet* Point ;

   if (!ExistOrder( 1 )) {
     if (StopLoss!= 0 ) ldStop=pAsk-StopLoss* Point ;
     if (TakeProfit!= 0 ) ldTake=pAsk+TakeProfit* Point ;
    SetOrder( OP_BUYSTOP , pAsk, ldStop, ldTake, 1 );
  }
   if (!ExistOrder( 2 )) {
     if (StopLoss!= 0 ) ldStop=pBid+StopLoss* Point ;
     if (TakeProfit!= 0 ) ldTake=pBid-TakeProfit* Point ;
    SetOrder( OP_SELLSTOP , pBid, ldStop, ldTake, 2 );
  }
}

//+------------------------------------------------------------------+
//| Модификация ордеров                                              |
//+------------------------------------------------------------------+
void ModifyOrders() {
bool ret;
   double ldStop= 0 , ldTake= 0 ;
   int     spr= MarketInfo ( Symbol (), MODE_SPREAD );
   double pAsk= Ask +(DistanceSet+spr)* Point ;
   double pBid= Bid -DistanceSet* Point ;

   for ( int i= 0 ; i< OrdersTotal (); i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC+ 1 ) {
         if (StopLoss!= 0 ) ldStop=pAsk-StopLoss* Point ;
         if (TakeProfit!= 0 ) ldTake=pAsk+TakeProfit* Point ;
        ret= OrderModify ( OrderTicket (), pAsk, ldStop, ldTake, 0 , clModifyBuy);
      }
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC+ 2 ) {
         if (StopLoss!= 0 ) ldStop=pBid+StopLoss* Point ;
         if (TakeProfit!= 0 ) ldTake=pBid-TakeProfit* Point ;
        ret= OrderModify ( OrderTicket (), pBid, ldStop, ldTake, 0 , clModifySell);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Возвращает флаг существования ордера или позиции по номеру       |
//+------------------------------------------------------------------+
bool ExistOrder( int mn) {
   bool Exist= False ;
   for ( int i= 0 ; i< OrdersTotal (); i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC+mn) {
        Exist= True ; break ;
      }
    }
  }
   return (Exist);
}

//+------------------------------------------------------------------+
//| Возвращает флаг существования позиции по номеру                  |
//+------------------------------------------------------------------+
bool ExistPosition( int mn) {
   bool Exist= False ;
   for ( int i= 0 ; i< OrdersTotal (); i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MAGIC+mn) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
          Exist= True ; break ;
        }
      }
    }
  }
   return (Exist);
}

//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//| Параметры:                                                       |
//|   op     - операция                                              |
//|   pp     - цена                                                  |
//|   ldStop - уровень стоп                                          |
//|   ldTake - уровень тейк                                          |
//|   mn     - добавить к MAGIC                                      |
//+------------------------------------------------------------------+
void SetOrder( int op, double pp, double ldStop, double ldTake, int mn) {
   bool ret;
   color   clOpen;
   string lsComm=GetCommentForOrder();

   if (op== OP_BUYSTOP ) clOpen=clOpenBuy;
   else clOpen=clOpenSell;
  ret= OrderSend ( Symbol (),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC+mn, 0 ,clOpen);
   if (UseSound) PlaySound (NameFileSound);
}

//+------------------------------------------------------------------+
//| Генерирует и возвращает строку коментария для ордера или позиции |
//+------------------------------------------------------------------+
string GetCommentForOrder() {
   return (Name_Expert);
}

//+------------------------------------------------------------------+
//| Удаление всех ордеров                                            |
//+------------------------------------------------------------------+
void DeleteAllOrders() {
   bool fd;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderMagicNumber ()>MAGIC && OrderMagicNumber ()<=MAGIC+ 2 ) {
         if ( OrderSymbol ()== Symbol ()) {
           if ( OrderType ()== OP_BUYSTOP || OrderType ()== OP_SELLSTOP ) {
            fd= OrderDelete ( OrderTicket ());
             if (fd && UseSound) PlaySound (NameFileSound);
          }
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Закрытие всех позиций по рыночной цене                           |
//+------------------------------------------------------------------+
void CloseAllPositions() {
   bool fc;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderMagicNumber ()>MAGIC && OrderMagicNumber ()<=MAGIC+ 2 ) {
         if ( OrderSymbol ()== Symbol ()) {
          fc= False ;
           if ( OrderType ()== OP_BUY ) {
            fc= OrderClose ( OrderTicket (), OrderLots (), Bid , Slippage, clCloseBuy);
          }
           if ( OrderType ()== OP_SELL ) {
            fc= OrderClose ( OrderTicket (), OrderLots (), Ask , Slippage, clCloseSell);
          }
           if (fc && UseSound) PlaySound (NameFileSound);
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Удаление противоположных ордеров                                 |
//+------------------------------------------------------------------+
void DeleteOppositeOrders() {
   bool fd, fep1, fep2;

  fep1=ExistPosition( 1 );
  fep2=ExistPosition( 2 );

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()== Symbol ()) {
        fd= False ;
         if ( OrderType ()== OP_BUYSTOP && OrderMagicNumber ()==MAGIC+ 1 ) {
           if (fep2) fd= OrderDelete ( OrderTicket ());
        }
         if ( OrderType ()== OP_SELLSTOP && OrderMagicNumber ()==MAGIC+ 2 ) {
           if (fep1) fd= OrderDelete ( OrderTicket ());
        }
         if (fd && UseSound) PlaySound (NameFileSound);
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions() {
   for ( int i= 0 ; i< OrdersTotal (); i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderMagicNumber ()>MAGIC && OrderMagicNumber ()<=MAGIC+ 2 ) {
         if ( OrderSymbol ()== Symbol ()) {
           if ( OrderType ()== OP_BUY ) {
             if (!ProfitTrailing || ( Bid - OrderOpenPrice ())>TrailingStop* Point ) {
               if ( OrderStopLoss ()< Bid -(TrailingStop+TrailingStep- 1 )* Point ) {
                ModifyStopLoss( Bid -TrailingStop* Point , clModifyBuy);
              }
            }
          }
           if ( OrderType ()== OP_SELL ) {
             if (!ProfitTrailing || OrderOpenPrice ()- Ask >TrailingStop* Point ) {
               if ( OrderStopLoss ()> Ask +(TrailingStop+TrailingStep- 1 )* Point || OrderStopLoss ()== 0 ) {
                ModifyStopLoss( Ask +TrailingStop* Point , clModifySell);
              }
            }
          }
        }
      }
    }
  }
}

//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//|   clModify   - цвет модификации                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss( double ldStop, color clModify) {
   bool    fm;
   double ldOpen= OrderOpenPrice ();
   double ldTake= OrderTakeProfit ();

  fm= OrderModify ( OrderTicket (), ldOpen, ldStop, ldTake, 0 , clModify);
   if (fm && UseSound) PlaySound (NameFileSound);
}
//+------------------------------------------------------------------+

 

안녕하세요. 여기에서 ClasterDelta의 지표를 사용하는 사람이 있습니까? VolumeProfile 표시기의 데이터 자동 사용에 대해 질문이 있습니다. 사실 이 표시기는 아무 것도 반환하지 않고 추세선 에서 히스토그램만 그립니다. 그러나 이 선 위로 마우스를 가져가면 이 틱에서 거래되는 거래량의 값이 나타납니다. 터키에서 이 정보를 얻는 방법!

어떤 생각이 드나요?

 

예전에 수업을 들으면서 접했던 것처럼 글에 설명되지 않은 뉘앙스가 있거나 검색 엔진을 통해 찾을 수 없을 정도로 어딘가에 숨겨져 있는 뉘앙스가 있습니다. 하루 종일 설명을 찾느라 허비되었습니다. 예를 들어, 이 기호는 무엇을 의미하며 그렇지 않은 경우 어떤 영향을 미칩니다. 아래 기사 의 예에서 볼 수 있듯이 처음에는 있고 그 다음에는 없습니다. &

   // Для int. Проверка существования в массиве элемента с заданным значением
   int Find( int & aArray[], int aValue)
     {
       for ( int i= 0 ; i< ArraySize (aArray); i++) 
        {
         if (aArray[i]==aValue) 
           {
             return (i); // Элемент существует, возвращаем индекс элемента
           }
        }
       return (- 1 ); // Нет такого элемента, возвращаем -1
     }

또한 이 기호가 의미하는 바가 명확하지 않습니다. ~

   // Конструктор
                     CName() { Alert ( "Конструктор" ); }
   // Деструктор
                     ~ CName() { Alert ( "Деструктор" ); }

*

CInfo * returnInfo()
  {
   CInfo * i = new CInfo();
   i.symbol= _Symbol ;

   return i;
  }