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

 
Catrock писал(а) >>

초보자의 또 다른 질문입니다.

Expert Advisor에서 여러 사용자 정의 기능을 사용합니다. 어떻게 이러한 기능을 라이브러리로 결합하고 EA 자체의 본문에서 호출할 수 있습니까?

그 문제에 대한 언어의 구문에 익숙하지 않습니다.

설명서 또는 자습서 섹션을 가리키십시오. 거기에 비슷한 것을 찾지 못했습니다.


https://book.mql4.com/ru/build/structure

https://www.mql5.com/ru/articles/1462

+ 힙에 ... https://book.mql4.com/en/appendix/examples

 

제로 바에 열린 포즈 있는지 확인하는 함수를 작성하는 방법(시간 프레임을 선택하는 것이 바람직합니다. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn =-1), 또는 이 함수 내가 이해하는 한 현재로서는 열린 자세일 뿐이고 열려 있었다가 이미 닫혀 있었다면 -1을 반환할 것입니다.

//+----------------------------------------------- ------------------------------+
//| 마지막 위치 열린 막대의 번호 또는 -1을 반환합니다. |
//| 옵션: |
//| sym - 기기 이름("" - 현재 기호) |
//| tf - 기간( 0 - 현재 기간) |
//| 연산 - 연산(-1 - 임의의 위치) |
//| mn - MagicNumber(-1 - 모든 마법) |
//+----------------------------------------------- ------------------------------+
정수 NumberOfBarLastPos(문자열 sym="", 정수 tf=0, 정수 연산=-1, 정수 mn=-1)
{
날짜 시간 oot;
정수 i, k=OrdersTotal();

if(sym="")
기호 = 기호();
for(i=0; ik; i++)
{
if( 주문 선택 (i, SELECT_BY_POS, MODE_TRADES ))
{
if(OrderSymbol()==sym)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op0 || OrderType()==op)
{
if(mn0 || OrderMagicNumber()==mn)
{
if(ootOrderOpenTime()) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
//+----------------------------------------------- ------------------------------+

 
두 사이클이 걸립니다. 첫 번째 단계에서는 주문 내역을 살펴보고 두 번째 단계에서는 현재 주문을 살펴봅니다. 두 경우 모두 주문 개시 시간이 Time[0]보다 크거나 같으면 현재 캔들에서 주문이 열린 것입니다. 이것은 모든 시간대에 해당됩니다.
 
drknn >> :
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.

문의해 주셔서 감사합니다. 이것을 코드로 요청할 수 있습니까?
 
gince >> :

Спадибо, что аткликнулся. А можно попросить это в коде

다음은 히스토리 패스의 예입니다.

 //=========== SchSellHist()  ===============================
//  Функция возвращает количество Sell-ордеров, лежащих в истории сегодняшних торгов
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSellHist( int MAGIC){
  string SMB= Symbol ();
  int SchSell= 0 ;
  int i;
  for (i=OrdersHistoryTotal()- 1 ;i>= 0 ;i--){
    if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) { WriteError(i);}
    else {
      if (OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue ;} 
      if (OrderType()==OP_SELL){
        if (OrderOpenTime()>=Time_D0){ // сегодняшний ордер
          SchSell++;
        }
      }
    }
  }
 return (SchSell);     
}    
             
//==================================================================================================

특히 알고리즘과 완성된 예제가 눈앞에 있기 때문에 코드를 직접 작성해 보십시오.
 
안녕하세요 사람들! 트랜잭션 후 코드를 알아낼 수 있도록 도와주세요. 차트, 화살표, 원, 선에 많은 쓰레기가 남아 있습니다. 제거하는 방법 또는 여기에서 스스로 삭제되도록 코드의 일부입니다.
 
무효 seta(문자열 a_name_0, int a_window_8, 이중 a_datetime_12, 이중 a_price_20, int ai_28, 색상 a_color_32, int a_width_36) {
ObjectDelete(a_name_0);
ObjectCreate(a_name_0, OBJ_ARROW , a_window_8, a_datetime_12, a_price_20);
ObjectSet(a_name_0, OBJPROP_ARROWCODE, ai_28);
ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32);
ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36);
}

무효 _setabuy(문자열 as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), 입찰가 + 15.0 * 포인트, SYMBOL_ARROWUP, 파란색, 2);
gi_120++;
}

무효 _setasell(문자열 as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), 입찰가 - 15.0 * 포인트, SYMBOL_ARROWDOWN, 빨간색, 2);
gi_120++;
}
 
drknn >> :

다음은 히스토리 패스의 예입니다.


특히 알고리즘과 완성된 예제가 눈앞에 있기 때문에 코드를 직접 작성해 보십시오.

고맙습니다. 노력하겠습니다.
 
drknn >> :

다음은 히스토리 패스의 예입니다.


특히 알고리즘과 완성된 예제가 눈앞에 있기 때문에 코드를 직접 작성해 보십시오.

또는 현재 막대에서 포즈가 열렸는지 확인하는 함수가 있습니다( OrdersTotal() 및 OrdersHistoryTotal() 로 확인). 유형 주문이 열린 경우 true를 반환합니다.

 bool CheckExists( int Type)                                  
 {
   bool Result = True;
   for ( int i = 0 ; i < OrdersTotal (); i++)
   if ( OrderSelect (i, SELECT_BY_POS))
     if (OrderType() == Type && OrderMagicNumber() == Magic && OrderSymbol() == Symbol ())
     if (OrderOpenTime() >= Time[ 0 ])
      Result = False;
   for (i = 0 ; i < OrdersHistoryTotal(); i++)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY))
     if (OrderType() == Type && OrderOpenTime() >= Time[ 0 ]
        && OrderMagicNumber() == Magic && OrderSymbol() == Symbol ())
      Result = False;
    }

   return (Result);
  }
 

조건을 구현하는 방법을 알려주세요.-

If( 보류 중인 주문 이 있음 ) 그러면 우리는 이것을 하고 ;