KimIV의 유용한 기능 - 페이지 51

 
친애하는 이고르! 누군가에게 불쾌감을 주었다면 사과드립니다.. 실은 제가 비난한건 아닌데 그런 모습이 안타깝네요. 어쨌든 배치된 프로토타입은 두 번 이상 수정되고 개선됩니다. 퍼즐이 없도록(저는 저작권을 주장한 적이 없습니다), 앞으로는 저작권 편집을 위한 작품을 보내드리겠습니다. 나 자신의 경우 지금까지 본 첫 번째 단계는 25페이지입니다. 완료되면 귀하의 사이트에 표시된 주소로 보내 드리겠습니다. 귀중한 작업과 무관심한 경험의 교환에 감사드립니다!!!
 
rid писал (а) >>

나는 그것이 가능하다고 생각한다. 분명히 각 레벨(교차로에서)에서 확인하는 것이 필요합니다. 열려 있는 위치의 현재 로트 크기가 얼마인지 확인합니다. 그리고 이 기준에 따라 폐쇄 메커니즘을 구현합니다!

이러한 기능(로트 크기 반환)은 이 스레드에 있습니다. 17, 27페이지 참조

매우 감사합니다! 만세! 이제 계속 진행할 수 있습니다. 정말 감사합니다!

 

OpenPosition () 함수에서 Lot Size별 추가 검사가 필요한지 여부를 판단하기 위해서는 어떻게 로트 크기와 호출 방법 및 위치를 계산합니다. 지점에서 이 기능을 보지 못했습니다.

 더블 ll = GetSizeLot () ;

어쩌면 내가 놓쳤다.

https://championship.mql5.com/2012/ru/news 와 같이 계산하면 오류 134가 발생할 수 있으며 챔피언십으로 비행한다고 가정해 보겠습니다 :-)

 

안녕하세요 KimIV.님이 보내주신 한 가지는 다시 작성해야 합니다. 요컨대, 프로그래밍 붐붐에서 나는 이다. 그리고 일반적으로 3주 동안 트레이더를 위해 공부합니다. 문법도 엉망이다.

여기. 질문은 ~이야. Cci 지표를 기반으로 Expert Advisor를 만들 수 있습니까? 어느 쪽인지 적어서 보여드리겠습니다.

CCI 레벨 250, 50, -50, -250. 요점은 예를 들어 (교차) -50과 50에 도달했을 때 각각 판매와 구매가 이루어졌다는 것입니다. 거래가 종료되어야 하는 시점을 고려하십시오.

1그런 다음 (판매가 있다고 가정 해 봅시다) 차트가 -250을 교차하고 -250을 반대 방향으로 교차하면 (그림에서 볼 수 있음)

2 -250에 도달하지 않는 그래프는 -50을 다시 교차합니다.

구매 방법은 동일하며 그 반대입니다.

유로/달러 인용, 모든 시간대.

그런 봉제 어드바이저의 비용은 얼마입니까????

같은 가격에 더 나은 것을 제공할 수 있습니까?

미리 감사드립니다. 그것이 가길 바랍니다. 글쎄, 나는 FOREX 코스에 갔다.

그건 그렇고, 빵과 버터를 위해 외환으로 돈을 버는 것이 정말 가능합니까????

 

모두를 환영합니다.

여기에서 지표를 발견하고 약간 변경했습니다. 좋은 추세선을 구축합니다.

기능을 짜는 것도 재미있을 텐데…

파일:
tlbs.mq4  8 kb
 
Prival писал(а) >>

에 대한

OpenPosition("GBPJPY", OP_SELL, 0.1, pb+23*po, pb-44*po);

OpenPosition (" GBPJPY ", OP _ SELL , 0.1, 23, 44)을 호출하는 것이 좋습니다.

이 제안인 Sergey는 포인트로 설정된 스톱 및 테이크 사용의 편의성을 개선합니다. 그러나 가격 수준에 따라 중지 및 테이크가 설정되는 경우는 어떻습니까? 예를 들어, 이전 막대의 고점 또는 저점에서 멈춥니다. 또는 어떤 종류의 라인을 따라. 함수를 호출하기 전에 포인트로 변환하고 함수 내부에서 다시 가격으로 변환하시겠습니까? 이는 중복 작업입니다. 그래서 그대로 두겠습니다.

나중에 GetSizeLot() 함수를 고려할 것입니다(그런데 지금은 GetLots() 이라고 합니다 ). 먼저 b-ForTest.mqhb-Positions.mqh 라이브러리로 완료해야 합니다.

 

테스터용 CountOrders() 함수.

내 테스트(MT4 테스터 전용으로 설계된) 버전의 EA에서 CountOrders() 함수는 ExistOrders() , ExistPositions() , NumberOfOrders()NumberOfPositions( ) 함수를 대체합니다. 즉, 어떤 종류의 포지션이나 오더의 존재에 대한 정보는 물론, 각 종류의 거래 횟수에 대한 정보를 제공할 수 있습니다. 이러한 교체는 주문 데이터베이스에 대한 원 틱 액세스로 표현되고 한 번에 필요한 모든 정보를 얻는 이점이 있습니다. 그리고 위에서 언급한 기능은 특히 조합하여 사용할 때 각각 동일한 주문 기반으로 독립적으로 작동하므로 동일한 호출을 반복적으로 수행합니다. 결과적으로 CountOrders() 함수를 사용하면 한 패스의 시간을 몇 초로 줄일 수 있으므로 최적화에 몇 시간을 절약할 수 있습니다.

CountOrders() 함수는 다음 매개변수를 사용합니다.

  • mo - 유형별 주문 수의 배열입니다. 함수를 실행한 후 배열에는 6개의 요소가 있습니다. 0 요소는 구매 유형의 거래 작업 수 , 첫 번째 요소는 판매 수, 번째 요소는 BuyLimit , 세 번째 요소는 SellLimit , 네 번째 요소는 BuyStop , 다섯 번째 요소는 SellStop 입니다.
  • mn - 위치 또는 주문의 식별자(MagicNumber). 기본값은 -1 - 모든 마법입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 03.08.2008                                                     |
//|  Описание : Рассчитывает количество ордеров по типам.                      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    mo - массив количества ордеров по типам                                 |
//|    mn - MagicNumber                          (-1 - любой магик)            |
//+----------------------------------------------------------------------------+
void CountOrders ( int & mo [ ] , int mn = - 1 ) {
   int i , k = OrdersTotal ( ) ;

   if ( ArraySize ( mo ) ! = 6 ) ArrayResize ( mo , 6 ) ;
   for ( i = 0 ; i < k ; i + + ) {
     if ( OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ) {
       if ( mn < 0 | | OrderMagicNumber ( ) = = mn ) mo [ OrderType ( ) ] + + ;
     }
   }
}

PS Attached는 CountOrders() 기능을 온라인으로 테스트하기 위한 스크립트입니다.

파일:
 

좋은 오후, Igor와 모두. GetFractalBar(NULL,0,0) 함수를 사용하는 데 문제가 있었습니다. - 숫자로 프랙탈 막대 숫자를 반환합니다. 더 정확하게는 문제는 기능에 있지 않습니다. 그리고 근처 어딘가.

댓글이 표시되면 이러한 작업에 문제가 없는 것입니다. 차트 모서리에 막대 번호가 있습니다.

 int a ;
. . . . . .

int start ( )
   {
//----
if ( Time [ 0 ] = = prevtime )    return ( 0 ) ; //ждём нового бара
   prevtime = Time [ 0 ] ; //если появился новый бар , включаемся

if ( isFractalUp ( ) > isFractalDn ( ) )    { //если это Down-фрактал

   a = iLow ( NULL , 0 , GetFractalBar ( NULL , 0 , 0 ) ) ;
   
Comment ( GetFractalBar ( NULL , 0 , 0 ) ) ;              }

그리고 이것으로 모든 것이 정상입니다. lev에 표시됩니다. 코너 분 프랙탈이 있는 막대의 가격 값.

 if ( isFractalUp ( ) > isFractalDn ( ) ) { //если это Down-фрактал
   a = iLow ( NULL , 0 , GetFractalBar ( NULL , 0 , 0 ) ) ;

Comment ( iLow ( NULL , 0 , GetFractalBar ( NULL , 0 , 0 ) ) ) ;            }

그러나 전혀 명확하지 않습니다! 함수 자체가 아닌 주석에 변수 ""를 삽입하자마자 가격 값 대신 주석이 구석에 있는 단위를 반환합니다! 바로 여기에 :

 if ( isFractalUp ( ) < isFractalDn ( ) ) {
   a = iLow ( NULL , 0 , GetFractalBar ( NULL , 0 , 0 ) ) ;
   Comment ( a ) ;                          }
내가 앉은 세 번째 시간, 나는 무엇이 문제인지 이해하지 못한다! 누가 가능한지 알려주세요...
 
Rita писал(а) >>
함수 자체가 아닌 주석에 변수 ""를 삽입하자마자 가격 값 대신 주석이 구석에 있는 단위를 반환합니다!

변수 "a"는 정수로 선언됩니다. 즉:

정수

그리고 그것을 진짜로 선언해야 합니다. 즉,

이중;

 

테스터를 위한 ModifyOrder() 함수.

이것은 미리 선택된 단일 주문 또는 위치의 절대 가격 수준을 변경하기 위해 7페이지 에 게시된 ModifyOrder() 함수의 경량 버전입니다.

ModifyOrder() 함수는 다음 매개변수를 사용합니다.

  • pp - 주문 배치 가격. 0보다 작거나 같은 값을 전달하면 이 가격 수준의 수정이 수행되지 않습니다. 기본값은 -1 입니다.
  • sl - 가격 수준을 중지합니다. 0보다 작은 값을 전달하면 이 가격 수준의 수정이 수행되지 않습니다. 기본값은 0 입니다.
  • tp - 가격 수준을 취합니다. 0보다 작은 값을 전달하면 이 가격 수준의 수정이 수행되지 않습니다. 기본값은 0 입니다.
  • - 보류 중인 주문 만료 날짜. 기본값은 0 입니다.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 28.03.2008                                                     |
//|  Описание : Модификация ордера. Версия функции для тестов на истории.      |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    pp - цена открытия позиции, установки ордера                            |
//|    sl - ценовой уровень стопа                                              |
//|    tp - ценовой уровень тейка                                              |
//|    ex - дата истечения                                                     |
//+----------------------------------------------------------------------------+
void ModifyOrder ( double pp = - 1 , double sl = 0 , double tp = 0 , datetime ex = 0 ) {
   int     dg = MarketInfo ( OrderSymbol ( ) , MODE_DIGITS ) , er ;
   double op = NormalizeDouble ( OrderOpenPrice ( ) , dg ) ;
   double os = NormalizeDouble ( OrderStopLoss ( )    , dg ) ;
   double ot = NormalizeDouble ( OrderTakeProfit ( ) , dg ) ;
   color   cl ;

   if ( pp < = 0 ) pp = OrderOpenPrice ( ) ;
   if ( sl < 0 ) sl = OrderStopLoss ( ) ;
   if ( tp < 0 ) tp = OrderTakeProfit ( ) ;
  
  pp = NormalizeDouble ( pp , dg ) ;
  sl = NormalizeDouble ( sl , dg ) ;
  tp = NormalizeDouble ( tp , dg ) ;

   if ( pp ! = op | | sl ! = os | | tp ! = ot ) {
     if ( MathMod ( OrderType ( ) , 2 ) = = 0 ) cl = clModifyBuy ; else cl = clModifySell ;
     if ( ! OrderModify ( OrderTicket ( ) , pp , sl , tp , ex , cl ) ) {
      er = GetLastError ( ) ;
       Print ( "Error(" , er , ") modifying order: " , ErrorDescription ( er ) ) ;
       Print ( "Ask=" , Ask , " Bid=" , Bid , " sy=" , OrderSymbol ( ) ,
             " op=" + GetNameOP ( OrderType ( ) ) , " pp=" , pp , " sl=" , sl , " tp=" , tp ) ;
     }
   }
}