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

 

매직 넘버가 MM에서 추적될 수 있도록 알려주십시오. 코드에 " mn "을 올바르게 추가했습니까?

 //+----------------------------------------------------------------------------------------+
//| ММ Функция работает по принципу наращивания лота при увеличении                        |
//| депозита, и уменьшении лота при серии убыточных сделок лот возвращается                |
//| на начальный лот в данном случае 0.1 если происходит профит то следующий               |
//| лот расчитывается по прогресии.                                                        |
//| К примеру при депозите 500 старт лота будет равен 0.1 далее депозит                    |
//| увеличивается до 5000 лот будет равен 1 если будет две убыточные сделки                |
//| лот уменьшится от предыдущего деленое на DecreaseFactor = 3, если по далее             |
//| две сделки будут убыточные,уменьшится от предыдущего деленое на DecreaseFactor = 3,    |
//| далее если сделка будет прибыльной то следующий лот откроется из расчета               |
//| баланса депозита "баланс/500*0.1"=лот внешние переменные                               |
//+----------------------------------------------------------------------------------------+

double LotsOptimized() {
       double minlot = MarketInfo( Symbol (), MODE_MINLOT);
       double maxlot = MarketInfo( Symbol (), MODE_MAXLOT);       
       double lot = Lots;
       int orders = OrdersHistoryTotal();
       int losses = 0 ;
       lot = NormalizeDouble ((AccountFreeMargin()- AccountCredit()) * MaximumRisk / balans, 2 );
       if (DecreaseFactor > 0.0 ) {
for ( int i = orders - 1 ; i >= 0 ; i--) {
       if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) == FALSE) {
       Print ( "Error in history!" );
       break ;
       }
if (OrderSymbol() != Symbol () || OrderType() > OP_SELL || OrderMagicNumber()!= mn ) continue ;
if (OrderProfit() > 0.0 ) break ; 
if (OrderProfit() < 0.0 ) losses++;
}
if (losses > 1 ) lot = NormalizeDouble (lot - lot * losses / DecreaseFactor, 2 );
}
if (lot < minlot) lot = minlot;
if (lot > maxlot) lot = maxlot; 
return (lot);} 
 
내가 설정할 수 있는 특정 시간에 어드바이저가 켜지도록 하는 임시 "조건"을 알려주세요.
 
모든 주문을 닫는 스크립트를 찾았습니다. 고문에 삽입하고 싶습니다. 그런 조건이 필요합니다 =(
 
Tiken123 :
내가 설정할 수 있는 특정 시간에 어드바이저가 켜지도록 하는 임시 "조건"을 알려주세요.
여기 .
 
감사해요!!
 
BeerGod :

매직 넘버가 MM에서 추적될 수 있도록 알려주십시오. 코드에 " mn "을 올바르게 추가했습니까?

Magic이 전역 변수 또는 상수로 선언된 경우:

 int mn = ****;

따라서 구조적으로 오류가 없습니다(작은 구문 편집).

 double LotsOptimized()
{
     double minlot = MarketInfo ( Symbol (), MODE_MINLOT),
           maxlot = MarketInfo( Symbol (), MODE_MAXLOT),       
           lot = Lots, ld_Profit = 0.0 ;
     int     orders = OrdersHistoryTotal(), losses = 0 ;
//----
    lot = NormalizeDouble ((AccountFreeMargin() - AccountCredit()) * MaximumRisk / balans, 2 );
     if (DecreaseFactor > 0.0 )
    {
         for ( int i = orders - 1 ; i >= 0 ; i--)
        {
             if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) { Print ( "Error in history!" ); break ;}
             if (OrderSymbol() != Symbol ()) continue ;
             if (OrderType() > OP_SELL) continue ;
             if (OrderMagicNumber() != mn) continue ;
             ld_Profit = OrderProfit();
             if (ld_Profit > 0.0 ) break ; 
             if (ld_Profit < 0.0 ) losses++;
        }
         if (losses > 1 ) lot = NormalizeDouble (lot - lot * losses / DecreaseFactor, 2 );
    }
     if (lot < minlot) lot = minlot;
     if (lot > maxlot) lot = maxlot; 
//----
     return (lot);
}

그리고 로트는 MODE_LOTSTEP의 다중도로 정규화되어야 합니다. 그렇지 않으면 조만간 오류 131(ERR_INVALID_TRADE_VOLUME)이 발생합니다.

글쎄, 함수에서 선언되지 않은 변수는 양심에 달려 있습니다 ... :)

 
방법을 알려주세요. 특정 주문을 종료한 후 올바른 수준에서 새 주문을 설정하세요. 이렇게 쓰려고 했는데 안 열리네요... 제대로 쓰는 방법은?
 //-- Открытие ордеров  после закрытия
if   ( OrderSelect (Ticket_B,SELECT_BY_TICKET,MODE_TRADES)==false)
     {Ticket_B= 0 ;}
if   ( OrderSelect (Ticket_B_1,SELECT_BY_TICKET,MODE_TRADES)== false )
     {Ticket_B_1= 0 ;}
if   ( OrderSelect (Ticket_B_2,SELECT_BY_TICKET,MODE_TRADES)== false )
     {Ticket_B_2= 0 ;}

...

       if (Ticket_B== 0 )    // в этом месте пробовал и (Ticket_B<1), тоже никак
        {                                     
         SL=Bid - New_Stop(StopLoss)* Point ;     
         TP=Ask + New_Stop(TakeProfit)* Point ;   
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket_B= OrderSend ( Symbol (),OP_BUY,Lts,Ask, 1 ,SL,TP, "121212" , 121212 , 0 , CLR_NONE );
         if (Ticket_B > 0 )                       
           {
             Alert ( "Открыт ордер Buy " ,Ticket_B);
             OrderSelect (Ticket_B,SELECT_BY_TICKET,MODE_TRADES);
            one_price=OrderOpenPrice();
         if (Fun_Error( GetLastError ())== 1 )     
             continue ;                           
         return ;                              
           }
        }
        
 
        
//-- Открытие ордеров -- BuyStop
       if (Up>= 1 && Ticket_B_1< 1 )
        {
         SL_1=SL;
         TP_1=one_price + StepUp* Point + New_Stop(TakeProfit)* Point ;
         Ticket_B_1= OrderSend ( Symbol (), OP_BUYSTOP, Lts, one_price + StepUp* Point , 1 , SL_1, TP_1, "121212" , 121212 , 0 , CLR_NONE );
           {
             Alert ( "Торговый приказ B2 отправлен на сервер. Ожидание ответа.." );
             if (Ticket_B_1> 0 )
              {
               Alert ( "Установлен ордер BuyStop " ,Ticket_B_1);
               }  
            }
         }
 

여보세요,

전문가의 도움이 필요합니다...

아이디어를 실행에 옮기지도 못하고.. 다 찾아낸 것 같은데 로봇에 집어넣었지만 여전히 그렇게 되지는 않는다 =(

오류가 있는지 확인하십시오.

나는 총 손실보다 더 큰 총 이익에 도달할 때 모든 수익성 있는 포지션의 청산을 달성하고 싶습니다. 나는 그러한 조건을 만들려고 노력하고 있습니다 (Profit>Obytkov) 모든 수익성있는 포지션을 닫으십시오

 

코드를 도와주세요. 조건 실패(총 이익>총 손실) 모든 수익성 있는 거래를 닫습니다.

그는 자신이 "최대 균형"의 순간부터 손실 거래를 계산해야 전체 손실보다 큰 이익에 도달했을 때 모든 수익성 있는 거래를 마감하고 새로운 저장소에서 이미 손실 거래를 새로 계산하기 시작합니다.

누군가 예금 잔액을 모니터링하는 고문을 만났을 수 있습니다. 예를 들어 거래가 50 잔액으로 시작되었습니다. 손실이 시작된 경우 고문은 잔액이 얼마나 감소했는지 기억해야 향후 이익이 발생했을 때 열린 위치의 수에 도달했습니다 이 손실보다 많으면 그는 모든 수익성 있는 거래를 닫고 손실을 다시 계산하기 시작해야 합니다.

   if (GetProfitOpenPosInCurrency()>NumberOfLossPosToday()) 
   int slippage= 1 ;
   int ask, bid, open;
   double point;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) break ;
       if (OrderType()==OP_BUY)
      {
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         if (point== 0 ) break ;
         bid= MathRound (MarketInfo(OrderSymbol(),MODE_BID)/point);
         open= MathRound (OrderOpenPrice()/point);
         if (bid-open<Profit) continue ;
         OrderClose(OrderTicket(),OrderLots(),bid*point,slippage);
      }
       if (OrderType()==OP_SELL)
      {
         point=MarketInfo(OrderSymbol(),MODE_POINT);
         if (point== 0 ) break ;
         ask= MathRound (MarketInfo(OrderSymbol(),MODE_ASK)/point);
         open= MathRound (OrderOpenPrice()/point);
         if (open-ask<Profit) continue ;
         OrderClose (OrderTicket(),OrderLots(),ask*point,slippage);
      }
   }
}
//--------------------------------------------------------------------
double GetProfitOpenPosInCurrency( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double p= 0 ;
   int     i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
            p+=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
   return (p);
}
//--------------------------------------------------------------------
int NumberOfLossPosToday( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   int       i, k=OrdersHistoryTotal(), kp= 0 ;

   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) {
              t=OrderCloseTime();
               if (Year()==TimeYear(t) && DayOfYear()==TimeDayOfYear(t)) {
                 if (OrderProfit()< 0 ) kp++;
              }
            }
          }
        }
      }
    }
  }
   return (kp);
}
 

그리고 마지막 1-2-3 주문이 수익성이 없었는지 어떻게 알 수 있습니까?

그리고 일반적으로 마지막 주문이 무엇인지 확인하는 방법은 무엇입니까?

예를 들어 보류 중인 구매 한도가 작동했는지 확인하고 작동했다면 가격은 얼마인지 확인한 다음 새 한도를 설정해야 합니다.

후행 중지에 의해 주문이 실행되었는지 확인하고 후행이 실행된 후 새 주문을 하는 방법은 무엇입니까?