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

 
좋은 저녁이에요. 웹사이트 http://fxcoder.ru/indicators/tpo에서 다운로드할 수 있는 특정 기간의 가격 수준별 거래 분포 지표를 사용하는 사람이 있는지 알고 싶었습니다. 그렇다면 어떻게 제대로 분석할 수 있을까? 정보가 있나요?
 
artemka_1981 :
이제 테스트 중에 로그에서 거래를 열지 않고 Open_BuyS_SellS EURUSD,Daily: OrderSend 오류 131이라고 표시됩니다.

오류 131은 잘못된 볼륨 입니다. 예를 들어 로트 1을 넣으려고 하면 로트 0.01을 열지 못할 수 있습니다.

ERR_INVALID_TRADE_VOLUME 131 잘못된 볼륨
 
ilunga :

오류 131은 잘못된 볼륨입니다. 예를 들어 로트 1을 넣으려고 하면 로트 0.01을 열지 못할 수 있습니다.

ERR_INVALID_TRADE_VOLUME 131 잘못된 볼륨
 //+------------------------------------------------------------------+
//|                                                Open_Buy_Sell.mq4 |
//|                                                                  |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#define magic 999
extern bool Buy = true  ; //  true - разрешено покупать
extern bool Sell = true  ; // true - разрешено продавать
#property link       "http://www.metaquotes.net"
extern double   _lots         = 1 ;
extern int      _takeProfit   = 1200 ;
extern int       maxpos       = 1 ;     // количество поз
extern bool     _trailingStop = true;
//+------------------------------------------------------------------+

int start()
  {
   double _slBuy= 0.0 ,_slSell= 0.0 , _tpBuy= 0.0 , _tpSell= 0.0 , _opBuy= 0.0 , _opSell= 0.0 ;

//if (iVolume(Symbol(),PERIOD_D1,0)>1) return;
//     if (Volume[0]>1) return;
     if (_trailingStop){ 
     _TrailingStop();
      }
   _opBuy= NormalizeDouble ( iHigh ( Symbol (), 0 , 1 ), Digits );
   _slBuy= NormalizeDouble ( iLow ( Symbol (), PERIOD_D1 , 1 ), Digits );
   _tpBuy= NormalizeDouble (Ask+_takeProfit* Point , Digits );
       if ( _opBuy<Ask && CountPos( 1 )<maxpos)
       if (barOpen(OP_BUYSTOP)== 1 ||barOpen(OP_BUY)== 1 )
         OrderSend ( Symbol (),OP_BUYSTOP,_lots,_opBuy, 15 ,_slBuy,_tpBuy, "Open_Buy_Sell" , 0 , Green );

   _opSell= NormalizeDouble ( iLow ( Symbol (), 0 , 1 ), Digits );
   _slSell= NormalizeDouble ( iHigh ( Symbol (), PERIOD_D1 , 1 ), Digits );
   _tpSell= NormalizeDouble (Bid-_takeProfit* Point , Digits );
     if (_opSell>Bid && CountPos( 0 )<maxpos)
       if (barOpen(OP_SELLSTOP)== 1 ||barOpen(OP_SELL)== 1 )
       OrderSend ( Symbol (),OP_SELLSTOP,_lots, _opSell, 15 ,_slSell,_tpSell, "Open_Buy_Sell" , 0 , Red );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+  
 //Проверяем количесвто позиций.
   int CountPos( int type) 
{ //Описание http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=66

    
int i;
int col;
int count= 0 ;
for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
if ( OrderSelect (i,SELECT_BY_POS)==true)
{
if ( OrderType ()==OP_BUYSTOP && OrderSymbol ()== Symbol () && type== 1 && OrderMagicNumber ()== magic){count++;}
if ( OrderType ()==OP_SELLSTOP && OrderSymbol ()== Symbol () && type== 0 && OrderMagicNumber ()== magic){count++;}
         }
       }   
return (count);
}
//+------------------------------------------------------------------+
void _TrailingStop(){
   int i;
   double _stopLossSellF= NormalizeDouble ( iHigh ( Symbol (), 0 , 1 ), Digits ),
          _stopLossBuyF= NormalizeDouble ( iLow ( Symbol (), 0 , 1 ), Digits );
   if ( OrdersTotal ()> 0 ){
       for (i= OrdersTotal ()- 1 ; i>= 0 ; i--){
         if ( OrderSelect (i, SELECT_BY_POS)){
             if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==magic){
             
               if ( OrderType ()==OP_BUY && OrderOpenPrice () < _stopLossBuyF){
                   while ( IsTradeContextBusy ()) Sleep ( 1000 );
                   RefreshRates ();
                   OrderModify ( OrderTicket (), OrderOpenPrice (),_stopLossBuyF, OrderTakeProfit (), OrderExpiration (), CLR_NONE );
               }
           
               if ( OrderType ()==OP_SELL && OrderOpenPrice () > _stopLossSellF && _stopLossSellF!= 0.0 ){
                   while ( IsTradeContextBusy ()) Sleep ( 1000 );
                   RefreshRates ();
                   OrderModify ( OrderTicket (), OrderOpenPrice (),_stopLossSellF, OrderTakeProfit (), OrderExpiration (), CLR_NONE );
               }
            }
         }
      }
   }
return ;
}
int barOpen( int ty)
{
datetime tim= 0 ;
 for ( int i= 0 ; i<= OrdersTotal (); i++)
    {  
       if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
       if ( OrderSymbol () != Symbol ()|| OrderMagicNumber ()!= magic|| OrderType ()!=ty) continue ; 
       if (tim< OrderOpenTime ())        
          tim= OrderOpenTime ();
   }
 for (i= 0 ; i<= OrdersHistoryTotal (); i++)
    {  
       if (! OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)) continue ;
       if ( OrderSymbol () != Symbol ()|| OrderMagicNumber ()!= magic|| OrderType ()!=ty) continue ; 
       if (tim< OrderOpenTime ())        
          tim= OrderOpenTime ();
   }
 
if (tim< iTime ( Symbol (), PERIOD_D1 , 0 )) return ( 1 );
 return ( 0 );
}
안녕하세요. 이제 Open_BuyS_SellS EURUSD,H4를 씁니다: OrderSend 오류 3

 
artemka_1981 :
안녕하세요. 이제 Open_BuyS_SellS EURUSD,H4를 씁니다: OrderSend 오류 3

오류 코드 알아보기
 
artemka_1981 :
안녕하세요. 이제 Open_BuyS_SellS EURUSD,H4를 씁니다: OrderSend 오류 3

오류 코드 와 함께 OrderSend에 대한 매개변수에 대한 도움말을 참조하십시오.

3 - 잘못된 매개변수.

하나를 놓쳤고 datetime 만료 대신 color color arrow_color를 썼습니다.

 
ilunga :

오류 코드와 함께 OrderSend에 대한 매개변수에 대한 도움말을 참조하십시오.

3 - 잘못된 매개변수.

하나를 놓쳤고 datetime 만료 대신 color color arrow_color를 썼습니다.

어리석은 질문에 죄송합니다. 이것은 내가 직접 작성하려고하는 첫 번째 Expert Advisor입니다. 모든 잼은 트롤 기능을 추가했을 때 시작되었습니다. 그래서 내 실수를 파악하기 위해 도움을 요청했습니다.
 

아는 사람을 도와주세요!


전략의 본질: 확률적 신호(5,14,3)에 진입하고 다른 기간(5,3,3)이 있는 확률론적 신호에서도 종료합니다. 그래서 역 신호가 아닌 스토캐스틱에서 출구를 만드는 방법을 이해할 수 없습니다.
문제가 있고 해결 방법을 모르겠습니다. 설명하려고 합니다.
그래서 내가 게시 한 코드에는 2 가지 기능이 있습니다.
 //+------------------------------------------------------------------+
//| подготовить массив тикетов для закрытия |
//+------------------------------------------------------------------+
void PrepareTicketsToClose( int signal, bool Revers, int & ticketsClose[][ 2 ], double & lots[], double arrayTickets[][ 9 ])
{
int size= ArrayRange (arrayTickets, 0 );
//----
if (size== 0 ) return ;

int i,type,ticket,closeSize;
for (i= 0 ;i<size;i++)
{
type=arrayTickets[i][ 1 ];
// если тип ордера не рыночный, то пропускаем
if (type>OP_SELL) continue ;

if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}

// тут решаем для каждого открытого ордера его судьбу
// оставить в рынке или добавить в массив на закрытие
if (type==OP_BUY)
{
//
// код разрешающий оставить покупку

// как пример
if (signal==OP_BUY) continue ;
}

if (type==OP_SELL)
{
//
// код разрешающий оставить продажу

// как пример
if (signal==OP_SELL) continue ;
}

closeSize= ArrayRange (ticketsClose, 0 );
ArrayResize (ticketsClose,closeSize+ 1 );
ArrayResize (lots,closeSize+ 1 );
ticketsClose[closeSize][ 0 ] = arrayTickets[i][ 0 ]; // # тикета
ticketsClose[closeSize][ 1 ] = arrayTickets[i][ 1 ]; // тип ордера

// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][ 2 ]; // закрываемый объем
// можно закрывать частично, тогда нужно переписать строку сверху
}
//----
return ;
}

//+------------------------------------------------------------------+
//| Закрывает ордера с указанными тикетами |
//+------------------------------------------------------------------+
void CloseMarketOrders( int ticketsArray[][ 2 ], double lotsArray[])
{
//----
int i,size= ArrayRange (ticketsArray, 0 );
if (size== 0 ) return ;

int ticket,type;
double lots;
bool res;

int total= OrdersTotal ();

for (i= 0 ;i<size;i++)
{
ticket = ticketsArray[i][ 0 ];
type = ticketsArray[i][ 1 ];
lots = lotsArray[i];
RefreshRates (); // на всякий случай обновим сведения о рыночном окружении

// блок закрытия покупок
if (type==OP_BUY)
{
res = OrderClose (ticket,lots,Bid,Slippage, Orange );
if (!res)
{
Print ( "Не удалось закрыть ордер в покупку #" ,ticket, "! Ошибка №" , GetLastError ());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

// блок закрытия продаж
if (type==OP_SELL)
{
res = OrderClose (ticket,lots,Ask,Slippage, Orange );
if (!res)
{
Print ( "Не удалось закрыть ордер в продажу #" ,ticket, "! Ошибка №" , GetLastError ());
// дальнейшая обработка ошибки, написать самостоятельно
}
}

}
//----
return ;
}
void PrepareTicketsToClose(int signal, bool Revers, int & ticketClose[][2], double & lott[],double arrayTickets[][9]) 함수에서 주문을 떠나기로 결정한 후 조건을 설정해야 합니다. 닫거나...
조건설정을 해봤는데 안되네요...
아마도 누군가가 살펴보고 이러한 기능에 오류가 있거나 내가 망쳤는지 보여줄 것입니다 ....
파일:
osc_test_1.mq4  37 kb
 
안녕하세요. 테스터에서 Expert Advisor를 실행한 후 로트(예: 로그)의 전체 트랜잭션 볼륨에 대한 정보를 얻어야 합니다. Expert Advisor에서 MM 블록이 활성화되어 있고, 자유자금의 %만큼 거래가 이루어지므로 단순히 거래수를 곱해서 계산하는 것은 불가능합니다. 그러한 정보를 제공하는 표준 기능이 있습니까( OrderLots와 같이 총 볼륨만 포함)? 그렇지 않은 경우 누군가 이 작업을 구현하기 위한 간단한 코드를 알려줄 수 있습니까? 고맙습니다.
 

WIFI를 통해 ADSL 모뎀에서 MT4용 포트를 여는 방법은 무엇입니까? 나는 6dts에서 온라인에 접속합니다. 모델 tp-link W8901G에서 토렌트용 포트를 열 수 있다고 읽습니다.

 
ruslanchik :

WIFI를 통해 ADSL 모뎀에서 MT4용 포트를 여는 방법은 무엇입니까? 나는 6dts에서 온라인에 접속한다. 모델 tp-link W8901G에서 토렌트용 포트를 열 수 있다고 읽습니다.

http://megatorrents.org/forum/viewtopic.php?t=262709 참조