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

 

문제. 누가 할 수 있는지 알려주세요.

OrderSelect 에서 (0,SELECT_BY_POS,MODE_HISTORY)

OrderProfit()에서 히스토리 목록의 첫 번째 이익을 반환합니다.

기록 목록의 마지막 이익을 정확히 반환하는 방법은 무엇입니까?

나는 다음과 같이 시도했다.

A=주문내역총계();

주문 선택(A,SELECT_BY_POS,MODE_HISTORY);

OrderProfit()은 아무 것도 반환하지 않음)

)) 그러나 쟁기질하지 않는다

 

전문가, 스크립트 수정 방법을 알려주세요. 스크립트를 사용하여 데이터를 내보냅니다.

 int start()
  {
  out_hist( "EURUSD" , 1440 );
  out_hist( "GBPUSD" , 1440 );
  out_hist( "USDJPY" , 1440 );
  out_hist( "USDCAD" , 1440 );
  out_hist( "AUDUSD" , 1440 );
//

  
   return ( 0 );
  }
//  
int out_hist( string ccy, int tf)
{
   string fname = ccy + tf + ".txt" ;
   int handle = FileOpen (fname, FILE_CSV | FILE_WRITE , "," );
   if (handle> 0 )
    {
     FileWrite (handle, "<TICKER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL>" );     // header
     for ( int i=iBars(ccy,tf)- 1 ; i>= 0 ; i--)
       {
       string P =ccy + tf;
       string date1 = TimeToStr(iTime(ccy,tf,i),TIME_DATE);
       date1 = StringSubstr (date1, 0 , 4 ) + StringSubstr (date1, 5 , 2 ) + StringSubstr (date1, 8 , 2 );
       string time1 = TimeToStr(iTime(ccy,tf,i),TIME_MINUTES);
       FileWrite (handle, P, date1, time1, iOpen(ccy,tf,i), iHigh(ccy,tf,i), iLow(ccy,tf,i), iClose(ccy,tf,i), iVolume(ccy,tf,i));
       }
     FileClose (handle);
     }
//----
   return ( 0 );

결과적으로 5개의 데이터 파일을 얻습니다. 첫 번째 기기에 대한 데이터를 포함하고 두 번째 기기에 대한 데이터를 포함하는 1개의 파일을 얻고 싶습니다. 어떤 이유에서인지 모든 것을 하나의 파일로 병합하는 것은 불가능합니다... 감사합니다.

 
kon12 :

전문가, 스크립트 수정 방법을 알려주세요. 스크립트를 사용하여 데이터를 내보냅니다.

결과적으로 5개의 데이터 파일을 얻습니다. 첫 번째 기기에 대한 데이터를 포함하고 두 번째 기기에 대한 데이터를 포함하는 1개의 파일을 얻고 싶습니다. 모든 것을 하나의 파일로 병합하는 데 뭔가가 작동하지 않습니다 ... 감사합니다.


파일 열기를 사용하여 읽기 및 쓰기, 파일 끝으로 이동 및 추가

파일열기(fname, FILE_WRITE|FILE_READ );

파일 찾기()

당신을 도와

 
gheka :

문제. 누가 할 수 있는지 알려주세요.

OrderSelect(0,SELECT_BY_POS,MODE_HISTORY)에서

OrderProfit()에서 히스토리 목록의 첫 번째 이익을 반환합니다.

기록 목록의 마지막 이익을 정확히 반환하는 방법은 무엇입니까?

나는 다음과 같이 시도했다 :

A=주문내역총계();

주문 선택(A,SELECT_BY_POS,MODE_HISTORY);

OrderProfit()은 아무 것도 반환하지 않음)

)) 그러나 쟁기질하지 않는다


따라서 마지막 영장을 아직 찾아야 합니다. 그리고 마지막은 무엇입니까. 개장 시간 또는 폐장 시간. 물론 어떤 도구를 찾아야 하는지 잊지 마십시오.
 
어드바이저에 무엇을 적어야 트랜잭션의 최대 볼륨을 엄격하게 제한할 것인가?어떤 볼륨을 열어야 할지 결정할 뿐인데 큰 볼륨을 오픈한 후 드레인이 발생하므로 이를 제한할 필요가 있다. 0.5를 초과하지 않습니다
 
ilmur :
어드바이저에 무엇을 적어야 트랜잭션의 최대 볼륨을 엄격하게 제한할 것인가?어떤 볼륨을 열어야 할지 결정할 뿐인데 큰 볼륨을 오픈한 후 드레인이 발생하므로 이를 제한할 필요가 있다. 0.5를 초과하지 않습니다
 extern double MyMaxVolume= 0.5 ;

...

if (рассчитанный_объем > MyMaxVolume) рассчитанный_объем=MyMaxVolume;
 
Necron :

사람이 알았다면 스스로 했을 것입니다. 그리고 여기에서 다른 사람의 코드를 변경해야 하는 것 같습니다.
 

고맙습니다

 
extern double SL=20; // SL для открываемого ордера
extern double TP=20; // ТР для открываемого ордера
extern double Lot=0.01; // Жестко заданное колич. лотов
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;

double
M_0,
M_1;


bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell

//--------------------------------------------------------------- 3 --
// Учёт ордеров


for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;

if(Total!=0 || time==Time[1])return;


// Торговые критерии

M_0=iOsMA(NULL,0,13,34,8,0,0); // 0 бар
M_1=iOsMA(NULL,0,13,34,8,0,1); // 1 бар



if (M_1<0 && M_0>0)
Opn_B=true;

if (M_1>0 && M_0<0)
Opn_S=true;

//--------------------------------------------------------------- 7 --


if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,Bid-SL*Point,Bid+TP*Point);time=Time[1];}

if (Opn_S)
{OrderSend(Symbol(),OP_SELL,Lot,Bid,0,Ask+SL*Point,Ask-TP*Point);time=Time[1];}
}


OsMA가 0선을 넘을 때 포지션을 여는 Expert Advisor. 그것이 어디에서 열리는지 명확하지 않고 이유도 명확하지 않습니다. iOsMA(NULL,0,13,34,8,0,0)에 오류가 있는지 확인하십시오.
 
bool isCloseLastPosByStop( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   double    ocp, osl;
   int       dg, i, j=- 1 , 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== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
     if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ;
    ocp= NormalizeDouble (OrderClosePrice(), dg);
    osl= NormalizeDouble (OrderStopLoss(), dg);
     if (ocp==osl) return (True);
  }
   return (False);
}

뭔가 작동하지 않습니다. 여기에서 무언가를 변경하거나 시작 후에 넣어야 할 수도 있습니다.

종이에 있는 코드를 내가 이해할 수 있는 언어로 러시아어로 번역하려고 했지만 도달하지 못했습니다.

너무 복잡합니다. 특히 각 후속 조건의 조건이 8개 조건 중 하나인 경우

물론 그런 코드를 만든 사람이 단순히 기적이라고 주장하는 것은 아니지만 나에게 이것은 완전한 변태(좋은 의미에서)입니다.

표준 기능을 제외하고 각 작업과 조건에 주석을 추가하는 데 너무 게으르지 않은 사람.