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

 
// ищем самый последний закрытый ордер
datetime time = 0 ;
int ticket = - 1 ;
for ( i = OrdersHistoryTotal ( ) - 1 ; i > = 0 ; i - - )
{
   if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) )
   {
      if ( OrderSymbol ( ) = = Symbol ( ) & & OrderMagicNumber ( ) = = 16384 )
      {
         if ( OrderCloseTime ( ) > time )
         {
            time = OrderCloseTime ( ) ;
            ticket = OrderTicket ( ) ;
         }
      }
   }
}
if ( OrderTicket ( ) ! = ticket ) OrderSelect (ticket , SELECT_BY_TICKET ) ;
if ( OrderProfit ( ) < = 0 ) Lots = OrderLots ( ) * 2 ;
//-----
코드는 이런것 같은데... 확인을 안해봤네요...
 
Vinin >> :

어쩌면 더 나을거야

당신의 도움을 주셔서 대단히 감사합니다!!



미국은 울고 유럽은 운다!

미래에 대해 진지하게 생각하십시오!

그들은 재정적인 f-pa를 생각하는 것 같습니다.

그리고 lischb 러시아 - ... 서리!

선반에서 오래된 하모니카를 꺼내자

우리는 그러한 위기에 익숙하지 않습니다!

보드카 지방과 감자가있을 것입니다.

우리는 모든 것을 살아남을 것입니다, 씩씩한 어머니 !!!

2월 23일부터 모두!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
Summer , 코드에서 시간 변수를 어떻게 선언했습니까?
 
Necron >> :

고맙습니다! 귀하의 옵션에 대한 고문에서 수정되었습니다. 여기에 나는 이 기적을 추가하고 코드 베이스에 나의 첫 (다소) 진지한 창조물로 게시할 것입니다! =)) 내가 고문을 작성하는 시스템은 Muteki라고 하며 약간만 추가됩니다(포지션 관리) . 이 모든 추세선을 표시하는 지표가 최소한 있다는 것은 좋은 일입니다 =)))

또 다른 질문이 있었습니다. 동시에 3개의 포지션(또는 대략 1개의 견적)을 여는 방법은 무엇입니까?저는 다음을 수행했습니다. 이게 맞나요 아니면 다른 방법이 있나요? 연기는 작동하지 않습니다 =(( 작은 거리가 때로는 너무 많습니다 :(


if(b1==0 && !IsTradeContextBusy())
{
if(Low[0]<HHL_1 && Bid>=HHL_1 && trade_buy==true)
{
ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,slippage*PointX,sl_b,BuyTarget1,"lot_1_buy",Magic,0,Lime);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("lot_1_buy order opened : ",OrderOpenPrice());
b1=1;
}
else Print("Error opening BUY order : ",GetLastError());

return(0);
}
}

여기에서 하나의 주문을 엽니다. 한 번에 3개를 시도하면 이 단계에서 더 빨리 나타납니다.

직접 실험해보지는 않았지만 3개의 거래 터미널을 병렬화하고 각 터미널에서 개별적으로 거래를 열면 뭔가를 얻을 수 있을지도...

 
StatBars >> :
Код вроде бы такой должен быть... но не проверял...

오류가 발생하여 경고로 표시했는데 로트가 항상 0으로 나온다고 합니다.


네크론에게:


코드에서 오류를 발견하고 제거했지만 여전히 다음과 같이 맹세합니다.



테크노:

더블)

파일:
graal_3.mq4  3 kb
 
시간 변수를 이중으로 선언했지만 날짜 시간이 필요하고 수정하고 원본 코드로 버전을 확인하십시오. 올바른 것 같습니다.
 
Summer :

내 Expert Advisors 중 하나에서 수행하는 방법은 다음과 같습니다.



double lt = getLots();//эта строчка в переменных, в ордерсенд пишем lt,


double getLots() { // это или перед start или после всего кода

double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
int round;
if(minlot==0.01)round=2;
if(minlot==0.1) round=1;
double koeff=2;
double result=Lots;

//int round = 2;
int total = OrdersHistoryTotal();
double spread = MarketInfo(Symbol(), MODE_SPREAD);

for (int i = 0; i < total; i++) {
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
if (OrderProfit() > 0) {
result = Lots;

} else {
result = OrderLots() * koeff;

}
}
}
result = NormalizeDouble(result, round);
if (result > maxlot) {
result = maxlot;
}
if (result < minlot) {
result = minlot;
}
RefreshRates();
return(result);
}

 

Techno , 팁 감사합니다!) StatBarsNecron 에게도 감사드립니다.

하지만 마틴게일이 정확히 나오도록 하기 위해 코드를 약간 수정했습니다))

 // ищем самый последний закрытый ордер
for ( i = OrdersHistoryTotal ( ) ; i > = 0 ; i - - ) {
   if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) ) {
     if ( OrderSymbol ( ) = = Symbol ( ) ) {
       if ( OrderMagicNumber ( ) = = Magic ) {
         if ( OrderCloseTime ( ) ! = 0 ) {
           if ( OrderCloseTime ( ) > time ) {
          time = OrderCloseTime ( ) ;
          profit = OrderProfit ( ) ;
          
             //мартин
             if ( profit < 0 ) Lots = OrderLots ( ) * 2 ;
             if ( profit > = 0 ) Lots = 0.1 ; // начальный лот
             //----
            
            
           }
         }
       }
     }
   }
}
//-----
 
StatBars >> :

여기에서 하나의 주문을 엽니다. 한 번에 3개를 시도하면 이 단계에서 더 빨리 나타납니다.

직접 실험해보지는 않았지만 3개의 거래 터미널을 병렬화하고 각 터미널에서 개별적으로 거래를 열면 뭔가를 얻을 수 있을지도...

알겠습니다, 6개 =) 3개는 구매, 3개는 판매용입니다. 나중에 데모에서 확인하려고 합니다. 최후의 수단으로 deferred를 사용하여 무언가를 시도할 것입니다.

 
Summer >> :

오류가 발생하여 경고로 표시했는데 로트가 항상 0으로 나온다고 합니다.

 double getLot ( )
{
if ( OrdersHistoryTotal ( ) = = 0 ) return ( 0.1 ) ;
// ищем самый последний закрытый ордер
datetime time = 0 ;
int ticket = - 1 ;
for ( i = OrdersHistoryTotal ( ) - 1 ; i > = 0 ; i - - )
{
   if ( OrderSelect ( i , SELECT_BY_POS , MODE_HISTORY ) )
   {
      if ( OrderSymbol ( ) = = Symbol ( ) /* && OrderMagicNumber()==16384*/ )
      {
         if ( OrderCloseTime ( ) > time )
         {
            time = OrderCloseTime ( ) ;
            ticket = OrderTicket ( ) ;
         }
      }
   }
}
if ( OrderTicket ( ) ! = ticket ) OrderSelect ( ticket , SELECT_BY_TICKET ) ;
if ( OrderProfit ( ) < = 0 ) return ( NormalizeDouble ( OrderLots ( ) * 2 , 2 ) ) ;
if ( OrderProfit ( ) > 0 ) return ( 0.1 ) ;
//-----
}