포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 538

 
denis77515 :

안녕하세요, 여러분, 전문가 프로그래밍 초보자를 거부하지 말고 올바른 철자를 위해 코드를보십시오. 그를 다루기에 너무 게으르지 않은 사람. 대용량 코드 작성은 이번이 처음이라 멀티 화폐라서 테스터에서 테스트는 못하지만 트레이딩 시스템은 그만한 가치가 있습니다. 코드와 지표가 있는 파일은 아카이브에 첨부되어 있습니다 .


관련 기호 배열을 생성하기 위한 단일 함수와 구매 및 판매를 위한 주문 수 (오픈 포지션)를 알아냈습니다. 데모에서 여러 포지션을 열어 스크립트로 테스트하세요.
 string Smbl[];
int CntBuy[],CntSell[];
void OnStart ()
 {
     if (CountBuySell(Smbl, CntSell, CntBuy))
       for ( int i=0; i< ArraySize (Smbl); i++) PrintFormat ( " Symbol %s CntBuy %d CntSell %d" , Smbl[i], CntBuy[i], CntSell[i]);
 }
//-------------------
bool CountBuySell( string &symb[], int &cnt_sell[], int &cnt_buy[])
{
   int ot,n,N= 0 ,f= 0 ,cb= 0 ,cs= 0 ;
   string symbol;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         
         ot= OrderType ()+ 1 ; if (ot> 2 )   continue ;                       // пропускаем лимит ордера
         symbol= "" ; symbol= OrderSymbol (); if (symbol== "" ) continue ;  // убедились что символ выбран
         f= 0 ; cb=0; cs=0;                                            // обнулили счетчики и флаг символа
         for (n= 0 ; n<N; n++) if (symbol==symb[n]) f= 1 ;               // если в массиве символ OrderSymbol () уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
         if (f== 0 )                                                   // такого символа symbol= OrderSymbol () еще не было, увеличим размерность массивов под новый символ и запишем этот символ
         {
            N++; 
             ArrayResize (symb,N); ArrayResize (cnt_buy,N); ArrayResize (cnt_sell,N);
            symb[N- 1 ]=symbol; cnt_buy[N- 1 ]= 0.0 ; cnt_sell[N- 1 ]= 0 ;
         }
         
         if (ot== 1 ) cb++;   // OP_BUY   для выбранного символа
         else       cs++;   // OP_SELL
         
        // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
        // такоим образом для каждого индекса всех 3 массивов будет соответствовать  конкретный символ и количество позиций покупки и продажи для него
         for (n= 0 ; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs;  }
         
      }
   }
   if (N> 0 ) return ( 1 );   // есть открытые позиции
   return ( 0 );           // позиций нет
}
 
evillive :

예금 통화의 손익의 지정된 값에 도달하면 계정의 모든 포지션을 닫는 간단한 Expert Advisor를 작성하려고 합니다(여러 기호에 대해 엽니다). 나타날 때만 즉시 포지션을 닫습니다( ((

나는 무엇이 잘못되었는지 이해하지 못한다:



확인 해봐.


외부 int 이익 = 30;

extern int Magic=0;

int CurProfit;

외부 부울 CurSymbolOnly = 거짓;


int start() // 사양. 시작 기능

{

//모든 주문의 이익 카운터

이중 p1;

int i1, kk1=OrdersTotal(), pr1=0;

(i1=0; i1<kk1; i1++)

{

if ( OrderSelect (i1, SELECT_BY_POS, MODE_TRADES))

{

if (!CurSymbolOnly || OrderSymbol()==Symbol())

{

p1=시장 정보(주문 기호(), MODE_POINT);

if (p1==0) if (StringFind(OrderSymbol(), Symbol())<0) p1=0.0001; 그렇지 않으면 p1=0.01;

if (주문유형()==OP_BUY)

{

pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0);

}

if (주문 유형()==OP_SELL)

{

pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0);

}

}

}

}

CurProfit=pr1;

////////////////////////////////////////////////////// / ///////////////////////////////////////////////////// // //////////////////////////////////////////////////



////////////////////////////////////////////////////// / ///////////////////////////////////////////////////// // //////////////////////////////////////////////////

만약 (이익<=pr1)

{

ClosePosWithMaxProfitInCurrency();

}

리턴(0);

}

////////////////////////////////////////////////////// / ///////////////////////////////////////////////////// // //////////////////////////////////////////////////


/// 가장 비싼 것부터 가장 싼 것까지 닫는다.

무효 ClosePosWithMaxProfitInCurrency(문자열 sy="", int op=-1, int mn=-1)

{

이중 pr=0;

정수 i5, k=OrdersTotal(), np=-1;

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

(i5=k-1, i5>=0, i5--)

{

if (OrderSelect(i5, SELECT_BY_POS, MODE_TRADES))

{

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

{

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

{

if (pr<OrderProfit()+OrderSwap())

{

pr=OrderProfit()+OrderSwap();

np=i5;

}

}

}

}

}

만약 (np>=0)

{

if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES))

{

{for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 중단;

if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),9);

if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9);

}

}

}

}

옷장();

}

////////////////////////////////////////////////////// / ///////////////////////////////////////////////////// // ////////////////////////////////////////////////


// 마감 연기

void closetlojnie()

{

(int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 중단;

if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());

if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());

if (OrderType()==OP_BUYLIMIT) OrderDelete(OrderTicket());

if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

}

}

 
GSB :
관련 기호 배열을 생성하기 위한 단일 함수와 구매 및 판매를 위한 주문 수(오픈 포지션)를 알아냈습니다. 데모에서 여러 포지션을 열어 스크립트로 테스트하세요.


물론 저에게 할당된 시간에 감사하지만 저에게는 여전히 어렵습니다. 무엇을, 어디서, 어떻게? 그들이 손가락에 말하는 것처럼.


시스템은 테스트해보고 데모계정에서 수동으로 거래했는데 좋은결과가 있어서 자동화 하고싶습니다.

 
GSB, 파코, 고마워, 내가 산만 해졌어, 나는 이것을 눈치 채지 못한다 ...
 
denis77515 :

물론 저에게 할당된 시간에 감사하지만 저에게는 여전히 어렵습니다. 무엇을, 어디서, 어떻게 설명합니까? 그들이 손가락에 말하는 것처럼.


시스템은 테스트해보고 데모계정에서 수동으로 거래했는데 좋은결과가 있어서 자동화 하고싶습니다.


오류만 있는 경우 데모에서 어떻게 테스트했습니까? 제시된 코드는 거래할 수 없습니다. 코드에 주석을 추가했습니다. 그게 다야 - 지식과 노력 없이 스스로 계속 일하십시오... 증권 거래소, 특히 외환 거래를 할 수 없습니다. 결과는 명확할 것입니다. 저는 데모 계정 에서 학습하고 거래할 것을 강력히 권장하며, 한 걸음 물러나지 않고 선택한 시스템에 따라 엄격하게 준수합니다. 2-3개월 후에 결과가 표시되면 이 시스템이 귀하에게 구체적으로 그리고 일반적으로 거래에 적합한지 여부를 결정할 것입니다.
 
감사합니다 열심히 합시다!
 
중재자 또는 관리자에게 질문: 닉네임을 변경할 수 있습니까? MQL5에 등록하려고 했으나 이미 이 닉네임이 사용된 것으로 밝혀져 다른 이름으로 등록해야 했습니다. 그리고 여기 저기 닉네임이 같으면 좋겠어요. 물론 여기에서 다시 등록할 수 있지만 이미 코드 베이스에 게시하기 시작했으며 단순히 "이름 바꾸기"를 통해 내 작업(및 게시물)의 저작권을 유지하고 싶습니다. 가능합니까?
 
Spy :
중재자 또는 관리자에게 질문: 닉네임을 변경할 수 있습니까? MQL5에 등록하려고 했으나 이미 이 닉네임이 사용된 것으로 밝혀져 다른 이름으로 등록해야 했습니다. 그리고 여기 저기 닉네임이 같으면 좋겠어요. 물론 여기에서 다시 등록할 수 있지만 이미 코드 베이스에 게시하기 시작했으며 단순히 "이름 바꾸기"를 통해 내 작업(및 게시물)의 저작권을 유지하고 싶습니다. 가능합니까?

개인적으로 Rosh에게 편지를 쓰십시오. 그녀를 찾으시기 바랍니다. 문제를 언급하다
 

알았어 고마워.

 

안녕하세요! 이전 버전의 MetaTrader에 어드바이저가 있어서 터미널을 업데이트했습니다. 그 후, 나는 다시 509로 돌아갔습니다. 그래서 Expert Advisors는 60... 빌드를 "방문"한 후 그들이 작성된 터미널 버전으로 돌아갔습니다.

문제는 "반환" 후 테스터에 대한 거래 개시를 중단한 Expert Advisor와 더 이상 확인할 수 없는(테스터의 시작 버튼이 단순히 클릭에 응답하지 않는) 전문가 고문을 어떻게 해야 합니까?

사유: