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

 

안녕하세요.

저는 프로그래밍에 익숙하지 않습니다. 누군가가 저를 도울 수 있습니다.

문제. 하나 이상의 미결 주문이 있으며 $20의 이익으로 마감될 것으로 알려져 있습니다.

$20의 이익으로 마감되는 주문 가격을 알아야 합니다.

총 공방량을 계산한 다음?!

방법을 알려주지 마세요.

이미 기성품 기능이 있습니까?

미리 감사드립니다.

 
KimIV :

DistMarketAndPos() 함수를 사용하는 예.

시장이 가장 가까운 위치에서 얼마나 멀리 떨어져 있는지를 결정하는 함수가 필요한 이유는 무엇입니까? 적어도 네 가지 주요 옵션이 있습니다.

  1. 구매 또는 판매. 시장이 우리 쪽으로 움직였다. 그리고 일정 거리를 지나면 기존 포지션이 일정 이익을 얻었기 때문에 바로 충전을 하고 같은 방향으로 다시 진입합니다.
  2. 구매 또는 판매. 시장이 우리 쪽으로 움직였다. 그리고 일정 거리를 이동하고 기존 위치가 일정 이익을 얻 자마자 우리는 즉시 모든 것을 이해합니다! 반전이 임박했다! 뒤집을 시간입니다. 우리는 현재 위치를 닫고 반대 방향으로 엽니다.
  3. 구매 또는 판매. 시장은 우리에게 불리했다. 그러나 어떤 이유로 우리는 우리가 옳고 가장 가까운 진입점에서 어느 정도 거리에 있다고 확신합니다. 즉, 평균 손실 수준에서 우리는 같은 방향으로 열립니다.
  4. 구매 또는 판매. 시장은 우리에게 불리했다. 그리고 입력에 오류가 있음을 깨달았습니다. 따라서 우리는 일정 수준의 손실을 고정하고 다른 방향으로 엽니다.

추신. 나열된 옵션의 특정 구현이 필요한 경우 여기에 애플리케이션을 작성하십시오. 나는 내가 위에 열거한 틀 안에서 모든 소원을 성취할 것입니다.

ZY-ZY. 예고편에는 DistMarketAndPos() 함수를 실험하기 위한 스크립트가 포함되어 있습니다.


안녕하세요 KimIV님, 기능이 아주 좋습니다 작동합니다 뒤집어도 작동하지만 두 반쪽을 연결할 수 없습니다.

     int start()

{

      if (DistMarketAndPos()>150)

{                                     

      OrderSend(Symbol(),OP_BUY,1.0,Ask,3,0,Ask+150*Point);

   }     

      return(0);

   }

int DistMarketAndPos(string sy="", int op=OP_BUY, int mn=-1) {

  double d, p;

  int i, k=OrdersTotal(), r=1000000;


  if (sy=="" || sy=="0") sy=Symbol();

  p=MarketInfo(sy, MODE_POINT);

  if (p==0) if (StringFind(sy, "")<0) p=0.00001; else p=0.01;

  for (i=0; i<k; i++) {

    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {

      if ((OrderSymbol()==sy) && (op<0 || OrderType()==op)) {

        if (mn<0 || OrderMagicNumber()==mn) {

          if (OrderType()==OP_BUY) {

            d=MathAbs(MarketInfo(sy, MODE_ASK)-OrderOpenPrice())/p;

            if (r>d) r=NormalizeDouble(d, 0);

          }

          if (OrderType()==OP_SELL) {

            d=MathAbs(OrderOpenPrice()-MarketInfo(sy, MODE_BID))/p;

            if (r>d) r=NormalizeDouble(d, 0);

          }

        }

      }

    }

  }

return (r);

}  


 

저에게 넘겨주세요. 모두가 옳지 않다고 말하지만 작동합니다.
 
초보자는 이를 위해 특별히 열린 스레드 에서 질문하십시오.
 

Message() 함수의 새 버전입니다.


Message() 함수는 여기 에 게시된 이후로 두 번 변경되었습니다. 첫 번째 변경 사항에는 Print() 함수에 의해 전문가 저널에 대한 출력을 비활성화하는 기능과 일련의 동일한 메시지의 첫 번째 메시지만 표시하는 기능이 추가되었습니다. 두 번째 변경은 출력 방향을 추가했습니다. 즉, 기존 Comment()Print() 함수에 추가하여 Alert() , SendMail()SendNotification() 이 사용되었습니다. 내가 게시하는 마지막 변경 사항입니다

Message() 함수는 다양한 방향으로 문자 메시지를 출력하도록 설계되었습니다. 현재 거래 상황을 설명하고, 프로그램의 작동을 기록하고, 거래자에게 적시에 중요한 변경 사항을 알리기 위해 디버깅 목적과 기성품 개발 모두에 사용할 수 있습니다. 이 기능은 세 가지 매개변수를 허용합니다. 마지막 두 가지는 선택 사항입니다.
  • ms - 문자열, 출력할 텍스트 메시지, 전송.
  • nv - 메시지가 출력되어야 하는 방향을 지정하는 플래그 문자열입니다. 다섯 개의 깃발은 다섯 개의 친숙함을 의미합니다. 각 친숙도는 0씩 꺼지고 1씩 특정 출력 방향이 켜집니다. 왼쪽부터 순서대로 Alert, Comment, Print, SendMail, SendNotification입니다. 기본값은 "01100"입니다. 즉, 주석 및 인쇄가 활성화되고 나머지는 비활성화됩니다.
  • am - 부울, True - 모든 메시지 표시, False - 일련의 동일한 메시지 중 첫 번째 메시지만 표시합니다. 기본값은 False 입니다.

경고 및 인쇄 출력 방향(익숙함 1 및 3)에 대해 메시지를 한 줄씩 표시할 수 있다는 점에 유의해야 합니다. 즉, 메시지 텍스트에 줄 바꿈이 있는 경우(제어 문자 "\n") 각 줄이 독립적으로 표시됩니다. 첨부 파일에 있는 테스트 스크립트를 사용해 보세요. 마음에 드실 거에요 :-)

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,   http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 08.03.2013                                                     |
//|  Описание : Вывод текстового сообщения.                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    ms - текст сообщения                                                    |
//|    nv - флаги направлений вывода сообщения:   (0-выкл, 1-вкл)              |
//|           Alert, Comment, Print, SendMail, SendNotification                |
//|    am - флаг всех повторяющихся сообщений                                  |
//+----------------------------------------------------------------------------+
void Message( string ms, string nv= "01100" , bool am=False) {
   static string prevMessage= "" ;
   string as[];
   int     i, k;

   if (StrToInteger( StringSubstr (nv, 1 , 1 ))== 1 ) Comment (ms);
   if (( StringLen (ms)> 0 ) && (am || prevMessage!=ms)) {
     if (StrToInteger( StringSubstr (nv, 0 , 1 ))== 1 ) {
      k=StrSplit(ms, as, "\n" );
       for (i= 0 ; i<k; i++) Alert (as[i]);
    }
     if (StrToInteger( StringSubstr (nv, 2 , 1 ))== 1 ) {
      k=StrSplit(ms, as, "\n" );
       for (i= 0 ; i<k; i++) Print (as[i]);
    }
     if (StrToInteger( StringSubstr (nv, 3 , 1 ))== 1 ) SendMail (WindowExpertName(), ms);
     if (StrToInteger( StringSubstr (nv, 4 , 1 ))== 1 ) SendNotification(ms);
    prevMessage=ms;
  }
}

추신. Message() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.

파일:
 
KimIV :

Message() 함수의 새 버전입니다.


Message() 함수는 여기 에 게시된 이후로 두 번 변경되었습니다. 첫 번째 변경 사항에는 Print() 함수에 의해 전문가 저널에 대한 출력을 비활성화하는 기능과 일련의 동일한 메시지의 첫 번째 메시지만 표시하는 기능이 추가되었습니다. 두 번째 변경은 출력 방향을 추가했습니다. 즉, 기존 Comment()Print() 함수에 추가하여 Alert() , SendMail()SendNotification() 이 사용되었습니다. 내가 게시하는 마지막 변경 사항입니다

Message() 함수는 다양한 방향으로 문자 메시지를 출력하도록 설계되었습니다. 현재 거래 상황을 설명하고, 프로그램의 작동을 기록하고, 거래자에게 적시에 중요한 변경 사항을 알리기 위해 디버깅 목적과 기성품 개발 모두에 사용할 수 있습니다. 이 기능은 세 가지 매개변수를 허용합니다. 마지막 두 가지는 선택 사항입니다.
  • ms - 문자열, 출력할 텍스트 메시지, 전송.
  • nv - 메시지가 출력되어야 하는 방향을 지정하는 플래그 문자열입니다. 다섯 개의 깃발은 다섯 개의 친숙함을 의미합니다. 각 친숙도는 0씩 꺼지고 1씩 특정 출력 방향이 켜집니다. 왼쪽부터 순서대로 Alert, Comment, Print, SendMail, SendNotification입니다. 기본값은 "01100"입니다. 즉, 주석 및 인쇄가 활성화되고 나머지는 비활성화됩니다.
  • am - 부울, True - 모든 메시지 표시, False - 일련의 동일한 메시지 중 첫 번째 메시지만 표시합니다. 기본값은 False 입니다.

경고 및 인쇄 출력 방향(익숙함 1 및 3)에 대해 메시지를 한 줄씩 표시할 수 있다는 점에 유의해야 합니다. 즉, 메시지 텍스트에 줄 바꿈이 있는 경우(제어 문자 "\n") 각 줄이 독립적으로 표시됩니다. 첨부 파일에 있는 테스트 스크립트를 사용해 보세요. 마음에 드실 거에요 :-)


추신. Message() 함수를 테스트하기 위한 스크립트가 첨부되어 있습니다.

OpenPosition 기능에 stoplevel 검사를 추가했습니까?
 
sv. :
OpenPosition 기능에 stoplevel 검사를 추가했습니까?


아니... 무슨 수표를 말하는 겁니까? 자, stop and take가 수표를 통과하지 못했다고 가정 해 봅시다. 어떻게해야합니까? 다음과 같은 옵션이 있습니다.

  1. 열지 마,
  2. 스톱 앤 테이크를 조정합니다.

 
KimIV :


아니... 무슨 수표를 말하는 겁니까? 자, stop and take가 수표를 통과하지 못했다고 가정 해 봅시다. 어떻게해야합니까? 다음과 같은 옵션이 있습니다.

  1. 열지 마,
  2. 스톱 앤 테이크를 조정합니다.

항목 1과 항목 2 사이에 사용자 지정 스위치를 입력할 수 있습니다. 예에 따라:
 int            modeSetOrders = 1 ;       // Способ установки ордеров:
                                       //  0 - по заданной цене
                                       //  1 - скорректировать цены
                                       //  2 - вход по текущим ценам
 

테스트 스크립트에 있는 OpenPosition() 함수의 새 버전입니다.

새로운 것은 무엇입니까?

1. 오류 130 잘못된 중지 및 변수 NumberOfTry>1의 경우 함수는 OP_SELL에 대한 입찰 및 OP_BUY에 대한 질문에 상대적인 MODE_STOPLEVEL+MODE_SPREAD 값으로 StopLoss 및 TakeProfit 가격 수준을 조정하려고 시도합니다.

논평:

가격 수준을 수정 하려면 전역 변수 NumberOfTry 의 값이 1보다 커야 합니다. 이는 첫 번째 포지션 개설 시도에서 오류 130을 감지하고 가격 수준을 수정하는 반면 두 번째 및 후속 시도에서는 조정된 수준을 가진 위치.

파일:
 
KimIV, 새로운 기능으로 다시 만나서 반갑습니다.
 

안녕하세요.

다음과 같은 몇 가지 간단한 기능으로 KimIV의 유용한 기능 라이브러리를 보완할 수 있습니까?

하나.   일부 기준으로 선택한 시가   위치(기호, 유형, 로트 크기, 매직 넘버). 이 가격은 전역 변수에 저장할 수 있으며 구축할 수 있는 일부 가격 수준으로 사용할 수 있습니다.   고문 알고리즘.

2.   일부 기준에 의해 선택된 티켓을 반환합니다.   직위   또는 주문(기호, 유형, 로트 크기, 매직 넘버). 티켓팅   중요한 식별자이며 모든 곳에서 그리고 존재 플래그로도 사용될 수 있습니다.

이러한 간단한 기능이 많을수록 선택이 더 쉬워집니다.   제일   기존 것을 수정할 때 실수하지 않을까 하는 두려움 없이 자신을 위한 최적의 것.

귀하의 기능에 감사드립니다.