[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 402

 
hoz :

Vadim, 나는 당신이 쓴 것과 똑같이 할 것입니다! 그래서 질문을 했습니다. 내가 몰랐을 수도 있겠다는 생각이 들었다. 당분간은 나 자신의 논리와 다른 프로그래머의 논리를 관찰한다. 기본 논리 외에도 여러 가지 요소를 고려해야 하기 때문입니다.

RefreshRates()는 EA 스레드의 기록을 업데이트합니다. MarketInfo()는 서버에서 데이터를 가져옵니다. 업데이트가 필요하지 않습니다. 추가 브레이크.

업데이트해야 하는 경우 RefreshRates()에 대한 간단한 호출은 아무 것도 제공하지 않을 수 있습니다. 전체 역사가 도래하는 사건을 어떻게든 통제하고 처리해야 합니다.

 
안녕하세요 메타에디터 프로그램은 어떻게 사용하나요?
 
crespo1985 :
안녕하세요 메타에디터 프로그램은 어떻게 사용하나요?


글쎄, 안녕! 원하는대로 사용하십시오! 당신은 그런 질문을 가지고 있지 않습니다 .. 여기 프로그래머 포럼이 있습니다 ..

준코 :

RefreshRates()는 EA 스레드의 기록을 업데이트합니다. MarketInfo()는 서버에서 데이터를 가져옵니다. 업데이트가 필요하지 않습니다. 추가 브레이크.

업데이트해야 하는 경우 RefreshRates()에 대한 간단한 호출은 아무 것도 제공하지 않을 수 있습니다. 전체 역사가 도래하는 사건을 어떻게든 통제하고 처리해야 합니다.

네. 내가 알기로 RefreshRates()는 시장 데이터( 현재 시간 까지의 기록)를 업데이트한 다음 시장 환경 변수는 수신된 값 중 마지막 값을 사용합니다. 내가 이해하는 한 이것이 유일한 논리적 옵션입니다. 이렇게 하면 이 함수가 이렇게 더 쉽고 빠르게, 더 논리적이고, 더 실용적이고, 더 안정적으로 작성될까요?

 double fGet_TradePrice( int fi_price,     // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
   double ld_price = 0.0 ;
   
   switch (fi_price)
   {
         case 0 :
         if (fs_symbol == Symbol ())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);
         
         case 1 :
         if (fs_symbol == Symbol ())
         {
             RefreshRates();
             ld_price = Ask;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_ASK);
   }
}
 
hoz :

네. 내가 알기로 RefreshRates()는 시장 데이터(현재 시간까지의 기록)를 업데이트하고 시장 환경 변수는 수신된 값 중 마지막 값을 사용합니다. 내가 이해하는 한 이것이 유일한 논리적 옵션입니다. 이렇게 하면 이 함수가 이렇게 더 쉽고 빠르게, 더 논리적이고, 더 실용적이고, 더 안정적으로 작성될까요?

나는 이것을 원한다:

 double TradePrice( int     nPriceId, // Цена: 0 - Bid; 1 - Ask
                  string sSymbol)   // валютная пара
 {
   switch (nPriceId)
   {
     case 0 : return (MarketInfo(sSymbol, MODE_BID));
     case 1 : return (MarketInfo(sSymbol, MODE_ASK));
     default : Print ( "Ошибка и прочее..." );
   }
   return ( 0 );
 }

히스토리를 업데이트하기 위해서는 별도의 함수를 작성해야 합니다.

 

다른 조건에 대한 추가 테스트를 위해 2시간 동안 테스트 조각을 작성하려고 했습니다.

작동하지 않습니다!

오류를 알려주세요

int mm;


if (mm== 0 ) { B=Bid; mm= 1 ;} 

OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES); 

if ( (Bid> B+ 0.0002 ) && ( OrdersTotal ()== 0 || OrderType()==OP_SELL) ) { My_close(); My_buy (); My_modify(); }  

if ( (Bid< B- 0.0002 ) && ( OrdersTotal ()== 0 || OrderType()==OP_BUY ) ) {My_close(); My_sell (); My_modify(); }
  

주문이 2pp 이후에 열리는 것이 합리적입니다.

판매 시작 및 종료...

 

안녕하세요! 평범해서 죄송합니다. 로봇에서 나온 라인, 나는 1년 이상 로봇을 가지고 있었고, 원칙적으로 이런 종류의 사이클은 항상 한 곳에서 다른 곳으로 방황합니다.

 for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--) 
      {   if ( OrderSelect (i,SELECT_BY_POS)&&OrderSymbol()== Symbol ()&&OrderMagicNumber()==magic)

총 주문에서 1을 뺀 이유는 무엇입니까? 루프가 변수를 감소시키는 것이 사실입니까?

 

Kim의 함수에는 매개변수 time = " 1970년 이후 날짜 및 시간(초) " 이 있습니다.

나는 2가지 옵션을 시도했다

둘 다 현재 날짜가 아니라 전체 역사에 대한 전체 이익을 제공합니다....

 int t=(     TimeCurrent ()-( (Hour()* 3600 ) +(Minute()* 60 )+Seconds()   ) ); 
int t=(    (Hour()* 3600 ) +(Minute()* 60 )+Seconds()    ); 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит в валюте депозита                  |
//|             закрытых с определённой даты позиций                           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента             (""   - любой символ,         |
//|                                               NULL - текущий символ)       |
//|    op - операция                             (-1   - любая позиция)        |
//|    mn - MagicNumber                          (-1   - любой магик)          |
//|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     |
//+----------------------------------------------------------------------------+
double GetProfitFromDateInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , datetime dt=0)
{
   double p= 0 ;
   int     i, k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (dt<OrderCloseTime()) {
              p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
  }
   return (p);
}
 
Dimka-novitsek :

안녕하세요! 평범해서 죄송합니다. 로봇에서 나온 라인, 나는 1년 이상 로봇을 가지고 있었고, 원칙적으로 이런 종류의 사이클은 항상 한 곳에서 다른 곳으로 방황합니다.

총 주문에서 1을 뺀 이유는 무엇입니까? 루프가 변수를 감소시키는 것이 사실입니까?

루프는 0에서 Total-1까지 또는 Total-1에서 0까지 인덱스를 계산합니다. 따라서 빼기 기호 또는 미만 기호 < 가 필요합니다.
 
Zhunko :

나는 이것을 원한다:

 double TradePrice( int     nPriceId, // Цена: 0 - Bid; 1 - Ask
                   string sSymbol)   // валютная пара
 {
   switch (nPriceId)
   {
     case 0 : return (MarketInfo(sSymbol, MODE_BID));
     case 1 : return (MarketInfo(sSymbol, MODE_ASK));
     default : Print ( "Ошибка и прочее..." );
   }
   return ( 0 );
 }

통해 데이터 수신   MarketInfo(), 이 창의 도구라도 제 생각에는 리소스 면에서 비쌀 것 같은데요, 그렇지 않나요?

준코 :

히스토리를 업데이트하기 위해서는 별도의 함수를 작성해야 합니다.


나는 별도의 함수를 작성하는 논리를 잘 이해하지 못합니다. 결국 RefreshRates() 함수 자체는 미리 정의된 변수 의 데이터를 업데이트하는 역할을 합니다. 그리고 BidAsk 는 미리 정의된 변수일 뿐입니다. RefreshRates() 함수가 미리 정의된 변수를 업데이트하는 경우 추가 함수를 작성하는 이유는 무엇입니까?설명할 수 있습니까?
 
감사해요!!
사유: