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

 
FoxUA :

예, 아마도 제가 정확하게 표현하지 않았을 것입니다. 예를 들어 BalansEURUSD를 변경해야 주어진 순간에 "BalansEURUSD = 5%"라는 용어로 프로 또는 손실에 대한 데이터를 얻을 수 있습니다.

그래서 여러 쌍에 대해 funene과 dolorena에 대해 더 말합시다.

한 번


이것은 더 어렵지만 다음을 계산할 수 있습니다.

매도 주문을 위해

이익=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo("EURUSD",MODE_TICKVALUE)*OrderLots()/Point,2);

margin=NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck("EURUSD",OP_SELL,OrderLots(),2);

구매:

이익=NormalizeDouble((Bid-OrderOpenPrice())*MarketInfo("EURUSD",MODE_TICKVALUE)*OrderLots()/Point,2);

margin=NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck("EURUSD",OP_BUY,OrderLots(),2);

이것은 주문의 이익 + 이 주문에 대한 마진을 계산하기 위한 완전한 공식이므로 마진을 고려해야 하기 때문입니다. 주문이 마감되면 해제된 마진이 잔액에 추가되고 금액이 증가하지만 실제 이익이 없을 수 있습니다.

 

얘들 아, 하나의 보류 주문 이 실행되면 다른 주문이 들어가도록 만드는 방법을 알려주십시오 ???? 셀렉트 오더를 통해서 안되는걸 해봤는데...........
~ 후에
주문 유형 == 구매, // 구매가 바이스톱이었던 곳
보류 중인 주문 열기 // (열지 않음)

 
VOLDEMAR :

얘들 아, 하나의 보류 주문이 실행되면 다른 주문이 들어가도록 만드는 방법을 알려주십시오 ???? 셀렉트 오더를 통해서 안되는걸 해봤는데...........
~ 후에
주문 유형 == buy, // Buy가 Buystop이었던 곳
보류 중인 주문 열기 // (열지 않음)


옵션으로 가장 먼저 떠오른 것은 - 모든 시장 및 대기 중인 주문에 대한 주기의 선택 주문을 통해 시장에 시장 주문(매수 또는 매도)이 있는지 확인하고 있는 경우 대기 중인 주문(기존에 설정된 )이 하나의 시장이 되면 다음 주문을 하십시오(필요한 또 다른 보류 주문, 예를 들어 구매 주문이 시장에 있는 경우 우회 주문 등). 나는 독서를 추천한다 -

alpari 웹사이트에서 - 외환 교육 - 트레이더 교과서 - 자동 거래 MKL4(패널 왼쪽에 있음) - 트레이딩 어드바이저 - (주문 선택 기능, 주문 보내기, 조건부 연산자 등)

http://www.alpari.ru/ru/school/textbook/autotrading/expert_advisors/ - 간결하고 유익한...

 

프로그래밍 방법을 배우려고 합니다. EA에서 해당 조건이 충족되지 않는 것 같습니다.

동안 (B*Point >zmm)
Comment("차이값", B);
OrderSend (Symbol(),OP_BUY,Lots,Ask,3,Bid-stoploss*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);

이 상황을 어떻게 확인할 수 있습니까?어떤 방법이 있습니까? 그리고 유휴 틱으로 가능합니까?

 

친애하는 전문가 여러분! 어드바이저 작성법을 배우고 있습니다. 작동하지만 전부는 아닙니다. 주문 수정 및 마감 블록이 작동하지 않습니다. 이유를 찾을 수 없습니다. 도와주세요.

 //+------------------------------------------------------------------+
//|                                                Monetny dvor1.mq4 |
//|                                                            fanat |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "fanat"
#property link       "http://www.metaquotes.net"

extern int TakeProfit= 484 ; //
extern int StopLoss= 89 ;     //
extern bool BStop=true;     //Включение безубытка
extern int Stop= 90 ;         //            
//+------------------------------------------------------------
int start()
{ //1
   
if (TakeProfit< 10 ){ Alert ( "Ошибка,Take слишком близко" ); return ;}
if (StopLoss< 10 ){ Alert ( "Ошибка,StopLoss слишком близко" ); return ;}
   
bool Buy=false;
bool Sell=false;
if (Close[ 0 ]>High[ 1 ])Buy=true;
if (Close[ 0 ]<Low[ 1 ])Sell=true;

int err;
int Order_Count[ 6 ];
int OP=- 1 ;
ArrayInitialize (Order_Count, 0 );                             
         
for ( int i= 0 ;i<= OrdersTotal ();i++)       //
  { //2                                   // Блок учета ордеров
   if ( OrderSelect (i,SELECT_BY_POS)==true) //
    { //3                                 //
     Order_Count[OrderType()]++;         //
     if (OP!=- 1 ) return (Order_Count[OP]);   //
    } //3
  } //2  
     if ( OrdersTotal ()> 0 )
      { //2
       if (BStop==true&&OrderOpenPrice()!=OrderStopLoss())                                                 //Модификация ордеров
        { //3                                                                                             //
         if ((OrderType()== 0 &&(Ask-OrderOpenPrice())>Stop)||(OrderType()== 1 &&(OrderOpenPrice()-Bid)>Stop)) //
          { //4                                                                                           // 
           int ticket=OrderTicket();                                                                     // 
           double Price=OrderOpenPrice();                                                                 //
           double SL=OrderOpenPrice();                                                                   //
           double TP=OrderTakeProfit();                                                                   //
           bool Ans=OrderModify(ticket,Price,SL,TP, 0 );                                                   //
           
           if (Ans==false){err= GetLastError (); Alert (err); Sleep ( 500 ); return ;}                               //Обработка ошибок
          } //4
        } //3
          
                                                                                                                                                                                                                                                                                                                                       // 
       if (OrderType()== 1 &&(Buy==true||Ask<OrderTakeProfit()||Bid>OrderStopLoss()))       //Условия закрытия ордеров Sell  
        { //3
         ticket=OrderTicket();                             //Закрытие ордеров Sell                                                                         
         double Lots=OrderLots();                           //
         OrderClose(ticket,Lots,Ask, 4 );                     //
         
         err= GetLastError ();                               //Обработка ошибок 
         if (err> 0 ){ Alert (err); Sleep ( 500 ); return ;}           //                                                                              
        } //3
                                                           
       if (OrderType()== 0 &&(Sell==true||Bid>OrderTakeProfit()||Ask<OrderStopLoss()))       //Условия закрытие ордеров Buy 
       { //3
         ticket=OrderTicket();                             //Закрытие ордеров Buy                   
         Lots=OrderLots();                                 //  
         OrderClose(ticket,Lots,Bid, 4 );                     //
          
         err= GetLastError ();                               //Обработка ошибок
         if (err> 0 ){ Alert (err); Sleep ( 500 ); return ;}           //
       } //3
      } //2 
                   
   if (Buy==false&&Sell==false) return ;
   int Total= 1 ;
   double Lot= 0.03 ;                 
/*  if(AccountBalance()>400)Lot=0.04;          //
   if(AccountBalance()>500)Lot=0.05;          //
   if(AccountBalance()>600)Total=2;           //
   if(AccountBalance()>800)Lot=0.04;Total=2;  // Блок вычисления лота для реала
   if(AccountBalance()>1000)Lot=0.05;Total=2; //
   if(AccountBalance()>1200)Lot=0.04;Total=3; //
   if(AccountBalance()>1500)Lot=0.05;Total=3; //
   if(AccountBalance()>1600)Lot=0.04;Total=4; //
   if(AccountBalance()>1800)Lot=0.03;Total=6;*/ //
   
   Lot= 0.1 ;
   if (AccountBalance()> 1600 )Lot= 0.2 ;
   if (AccountBalance()> 2400 )Lot= 0.3 ;
                                                                                      
   if (Order_Count[OP_BUY]<Total&&Order_Count[OP_SELL]== 0 &&Buy==true)                     //Открытие ордеров Buy
   { //2                                                                                  //
       OrderSend ( Symbol (), OP_BUY, Lot, Ask, 4 , Ask-StopLoss* Point , Ask+TakeProfit* Point ); //
       
      err= GetLastError ();                                                                 //Обработка ошибок
       if (err> 0 ){ Alert (err); Sleep ( 500 );}                                                   //
       return ;
   } //2         
           
   if (Order_Count[OP_SELL]<Total&&Order_Count[OP_BUY]== 0 &&Sell==true)                     //Открытие ордеров Sell 
   { //2                                                                                   //
       OrderSend ( Symbol (), OP_SELL, Lot, Bid, 4 , Bid+StopLoss* Point , Bid-TakeProfit* Point ); //
      
      err= GetLastError ();                                                                 //Обработка ошибок
       if (err> 0 ){ Alert (err); Sleep ( 500 );}                                                   //
   } //2
  
return ;
} //1

돕다.

 
fanat :

친애하는 전문가 여러분! 어드바이저 작성법을 배우고 있습니다. 작동하지만 전부는 아닙니다. 주문 수정 및 마감 블록이 작동하지 않습니다. 이유를 찾을 수 없습니다. 도와주세요.

돕다.


이미 기능에 대해 알아볼 시간이 되었습니까?
 

여기에 문제가 있습니다:

MathSrand( 시간로컬() );

정수 periodRandom=period+ MathRand()/10000;
정수 period2Random=period2+ MathRand()/10000;

Moving1=iMA(Symbol(),0,periodRandom,0,MODE_SMA,price,1) ;

Moving2=iMA(Symbol(),0,period2Random,0,MODE_SMA,가격,1);

나는 틱의 기간을 무작위로 변경하기로 결정했습니다. 기간에 0에서 3까지의 임의의 값을 더했습니다.

그러나 테스터에서 실행은 항상 동일한 양의 이익을 보여줍니다. 아마도 기간이 바뀌지 않았을 것입니다. 내가 코딩을 잘못한 것은 무엇입니까?

[삭제]  

안녕하세요! 질문은 간단합니다. 상수가 아닌 2차원 배열의 두 번째 차원을 어떻게든 설정할 수 있습니까?

즉, 다음을 수행해야 합니다. double massiv[5][5], 그리고 나는 double massiv[5][k]를 원합니다. 여기서 k는 예를 들어 extern int k = 5를 통해 이전에 지정된 알려진 정수 값입니다. 첫 번째 차원은 ArrayResize 함수 로 변경할 수 있지만 어떤 이유로 두 번째 차원은 변경할 수 없습니다...

 
fru1t :

안녕하세요! 질문은 간단합니다. 상수가 아닌 2차원 배열의 두 번째 차원을 어떻게든 설정할 수 있습니까?

즉, 다음을 수행해야 합니다. double massiv[5][5], 그리고 나는 double massiv[5][k]를 원합니다. 여기서 k는 예를 들어 extern int k = 5를 통해 이전에 지정된 알려진 정수 값입니다. 첫 번째 차원은 ArrayResize 함수로 변경할 수 있지만 어떤 이유로 두 번째 차원을 변경하는 것은 불가능합니다 ...


#define k 5

 

https://docs.mql4.com/en/basis/preprosessor/constant

 

안녕하세요 감정사입니다.

왼쪽 상단의 표시기 하위 창에서 정보를 제거하는 방법을 설명하십시오.

방해합니다.