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

 
wishmast :

얘들아, 난 이미 내 머리를 부숴버렸어. 어드바이저가 고점과 저점에 대한 지연을 설정하도록 하는 방법, 예를 들어 1/4의 테이크를 사용하여 8개의 양초에 대해 설정하는 방법.

나는 다음과 같이 한다.

이중 Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0);

이중 Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0);

이중 TP=((Vhod1-Vhod2)/4)+Vhod1;


매개변수를 변경하려고 했지만 정류장이 올바르지 않다고 표시되며 가격은 7.00000으로 설정됩니다. 어디로 가는지 명확하지 않습니다.

iHighest , iLowest 는 가격이 아닌 양초의 주소를 알려주고 도움말과 교과서를 읽으십시오.
 
evillive :
iHighest, iLowest는 가격이 아닌 양초의 주소를 알려주고 도움말과 교과서를 읽으십시오.

알겠습니다. 필요한

이중 Vhod1=iHigh(Symbol(), 0, iHighest (Symbol(),0,MODE_HIGH,8,0));

이중 Vhod2=iLow(Symbol(), 0, iLowest(Symbol(),0,MODE_LOW,8,0));

 
alvlaf :


잘못 삽입했지만 여전히 제대로 작동하지 않습니다. 왜냐하면 ... 왜냐하면.)) 간단히 말해서 다음과 같아야 합니다.

1) init에서 AllowNewOrders 변수를 만듭니다(존재하지 않는 경우).

2) 닫힐 때까지 새 주문을 생성합니다. 이 기호의 OnTick은 유휴 상태이지만 다른 기호의 OnTick은 작동합니다.

3) 다른 기호에 대한 2단계는 MaxOpenOrders 제한에 도달할 때까지 수행됩니다.

4) 주문 종료 시 수익성이 없거나 0인 경우 AllowNewOrders를 통해 모든 사본에 대해 신규 주문을 개시하는 것을 금지합니다.

[따라서 즉시 문제 - 패배한 시리즈가 끝나면 AllowNewOrders=1이고 MaxOpenOrders>1이고 이러한 세션이 여러 개 있는 경우?]

5) 4번 항목이 충족되지 않으면 새 주문을 열 수 있습니다.

프로그램은 이미 MaxOpenOrders=1과 함께 작동해야 합니다(SHOULD ALREADY). 실패한 주문에 따라 새로운 주문 AllowNewOrders=0을 금지하고 어떤 이유로 다음 OrderSend 가 주문을 열지 않을 때 여전히 문제가 있을 수 있습니다. 이 경우에 내가 어떻게 보험에 가입하는지 아래에 쓸 것입니다 ...

 int OnInit ()                     
{
   if (! GlobalVariableCheck ( "AllowNewOrders" )) GlobalVariableSet ( "AllowNewOrders" , 1 );
   return ( INIT_SUCCEEDED );
}
//----------------------------------------------------------------------
void OnTick ()
{
   if (CountTrades() == 0 )   // Количество ордеров должно равняться нулю
   {
       if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
       // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet ( "AllowNewOrders" , 0 );
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble (LotsLastHistOrder()*Multiplier, 2 );
         ticket = OrderSend ( Symbol (), Type, Lot, Price, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
      }
       else GlobalVariableSet ( "AllowNewOrders" , 1 );
       if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 ) 
       // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet ( "AllowNewOrders" , 0 );
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble (LotsLastHistOrder(), 2 );
         ticket = OrderSend ( Symbol (), Type, Lot, Price, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
      }
       else GlobalVariableSet ( "AllowNewOrders" , 1 );
       if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0 )
       // Если последняя сделка прибыльная или это первая сделка, то открывается ордер
      {
         if ( OrdersTotal () >= MaxOpenOrders || GlobalVariableGet ( "AllowNewOrders" ) == 0 ) return ;
         if (SignalBuy())
         {
            ticket = OrderSend ( Symbol (), OP_BUY, Lots, Ask, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
         }
         if (SignalSell())
         {
            ticket = OrderSend ( Symbol (), OP_SELL, Lots, Bid, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
         }
      }
   }
}
 
A13ksandr :

아래에서이 경우에 내가 어떻게 보장하는지 쓸 것입니다 ...

 int Tries = 5 ;
ResetLastError ();
do
{
   // решение ошибок с предыдущей попытки открытия ордера, например:
   if (_Error == 134 )
   {
      _Lot = NormalizeDouble (_Lot / 2 , 2 );
       if (_Lot < SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN )) _Lot = SymbolInfoDouble ( Symbol (), SYMBOL_VOLUME_MIN );
   }
   if (_Error == 138 ) RefreshRates();
   Ticket = OrderSend ( Symbol (), OP_BUY, _Lot, Ask, 3 , 0 , 0 , NULL , 0 , 0 , clrNONE );
   if (Ticket < 0 )
   {
      _Error = GetLastError ();
       Sleep ( 100 );
   }
   Tries--;
}
while (Ticket < 0 && Tries > 0 );

오류 솔루션을 올바르게 제공하면 주문을 여는 성공률이 높아집니다.

 
안녕하세요! 게시물의 기능을 사용할 때 알려주십시오 (각 주문에는 고유 한 마법이 있습니다) - http://forum.forexpeoples.ru/showthr...=1#post1715092 , 판매 또는 구매에 대한 최신 주문을 검색하는 방법, 또는 일련의 주문을 업그레이드하는 것은 각 주문에 고유한 마법이 없지만 각 주문 시리즈에는 고유한 마법이 있는 것처럼 보일 것입니다. 저것들. 마법을 사용하는 새로운 주문 시리즈가 열리면 기존 시리즈가 마법으로 주문을 계속 연다고 가정합니다. 각 시리즈에는 고유 한 이익이 있으며 이러한 일련의 주문이 많이 있습니다.

이러한 조건에서 아래 코드는 어떻게 변경될 수 있습니까?
for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
if (! OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES)) 계속;
if(OrderSymbol()!=Symbol()) 계속; if(OrderMagicNumber() < startMagicNumber || OrderMagicNumber() >= startMagicNumber + MaxTrades) 계속;

시리즈의 첫 주문을 열 때 마법 생성 코드를 설정했는데 같은 시리즈에서 새 주문을 열 때 문제가 있습니다.

게시물의 매직 생성 코드 자체:
//+----------------------------------------------- --------------------+
// keekkenen: 시리즈의 다음 마법을 얻습니다.
int getNextMagicNumber(){
정수 마법 = 비어 있음;

if (OrdersTotal() == 0) {
반환(startMagicNumber);
}

for (int i = startMagicNumber; i < startMagicNumber + MaxTrades; i++){
매직 = checkMarketByMagic(i);
if (magic != EMPTY) break;
}

if (마법 == 비어 있음){
매직 = startMagicNumber; // 시리즈의 첫 번째
} 또 다른 {
마법++; // 시리즈의 다음
}

리턴(마법);
}
//+----------------------------------------------- --------------------+
// keekkenen: 지정된 마법으로 시장에 주문이 있는지 확인
int checkMarketByMagic(int 마술){
for(int i = 0; i < OrdersTotal(); i++){
if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 계속;
if(OrderSymbol() != Symbol()) 계속;
if(OrderMagicNumber() == 마법) return(마법);
}
반환(빈);
}
//+----------------------------------------------- --------------------+
 
포럼의 신사 여러분, 좋은 하루 되세요.
가지를 혼동했다면 죄송하지만 TOPIC을 제대로 붙일 곳을 찾지 못했으니 걷어차지 마세요.

얼마 전 사용자들의 기존 신규 어드바이저를 찾기 위해 인터넷 검색을 하던 중, 설명에 따르면 기준이 많았고 내 불행에 관심을 두지 않았고, 이름도.

아마 보거나 읽은 누군가가 적어도 이름을 알려 주면 Google이 일을 할 것입니다. 만약 있다면 그것을 선물로 받아 들일 것입니다. 비슷한 행동을 하는 비슷한 고문이 있을지도 모릅니다.

어드바이저의 의미를 설명하겠습니다.

대략적으로 그 작업은 다음과 같습니다.

1. 수동으로 포지션을 개설했습니다 (예: 구매).
2. 고문은 그에게 손절매를 설정하고 설정에 따라 이익을 얻습니다.
3. 이익실현으로 주문 마감 - 어드바이저는 첫 번째 손절매를 잡거나 최종 이익실현이 있을 때까지 즉시 또 다른 매수를 열고 동일한 손절매를 설정하고 이익실현을 합니다.
4. 위치가 정지 손실로 닫히면 로봇은 다른 작업을 수행하지 않습니다. EA는 다음 주문이 수동으로 열리기를 기다리고 있습니다.

모두.

나는 매우 감사할 것입니다.
 
A13ksandr :


잘못 삽입했지만 여전히 제대로 작동하지 않습니다. 왜냐하면 ... 왜냐하면.)) 간단히 말해서 다음과 같아야 합니다.

1) init에서 AllowNewOrders 변수를 만듭니다(존재하지 않는 경우).

2) 닫힐 때까지 새 주문을 생성합니다. 이 기호의 OnTick은 유휴 상태이지만 다른 기호의 OnTick은 작동합니다.

3) 다른 기호에 대한 2단계는 MaxOpenOrders 제한에 도달할 때까지 수행됩니다.

4) 주문 종료 시 수익성이 없거나 0인 경우 AllowNewOrders를 통해 모든 사본에 대해 신규 주문을 개시하는 것을 금지합니다.

[따라서 즉시 문제 - 패배한 시리즈가 끝나면 AllowNewOrders=1이고 MaxOpenOrders>1이고 이러한 세션이 여러 개 있는 경우?]

5) 4번 항목이 충족되지 않으면 새 주문을 열 수 있습니다.

프로그램은 이미 MaxOpenOrders=1과 함께 작동해야 합니다(SHOULD ALREADY). 실패한 주문에 따라 새로운 주문 AllowNewOrders=0을 금지하고 어떤 이유로 다음 OrderSend가 주문을 열지 않을 때 여전히 문제가 있을 수 있습니다. 이 경우에 내가 어떻게 보험에 가입하는지 아래에 쓸 것입니다 ...

Alexander님 감사합니다. 내일 확인하겠습니다. [따라서 즉시 문제 - 패배한 시리즈가 종료될 때 AllowNewOrders=1이고 MaxOpenOrders>1이고 이러한 세션이 여러 개 있는 경우?] MaxOpenOrders>1이 어떤 값이면 이론적으로 AllowNewOrders=1도 더 커야 합니다. 같은 값으로. 그러나 이 버전의 프로그램에서는 어쨌든 하나 이상의 시리즈가 계획되어 있지 않기 때문에 지금은 이것에 신경 쓰지 않고 MaxOpenOrders를 완전히 제거할 수 없습니다.
 
alvlaf :
Alexander님 감사합니다. 내일 확인하겠습니다. [따라서 즉시 문제 - 패배한 시리즈가 종료될 때 AllowNewOrders=1이고 MaxOpenOrders>1이고 이러한 세션이 여러 개 있는 경우?] MaxOpenOrders>1이 어떤 값이면 이론적으로 AllowNewOrders=1도 더 커야 합니다. 같은 값으로. 그러나 이 버전의 프로그램에서는 어쨌든 하나 이상의 시리즈가 계획되어 있지 않기 때문에 지금은 이것에 신경 쓰지 않고 MaxOpenOrders를 완전히 제거할 수 없습니다.
나는 그것을 시도했고, 처음 5분 동안은 잘 작동했고, 그 다음 나는 동시에(4), 증가된 로트와 함께 같은 쌍에 대해 여러 거래를 열기 시작했습니다. Alexander, 전역 변수 가 어떻게 그 값을 얻고 변경하는지 귀하의 버전에서 나에게 완전히 명확하지 않습니까?
 

안녕 모두!

차트에 이러한 그래픽 개체가 있습니다.

매개변수에서 시간, 가치, 코드. 값은 개체가 위치한 가격에 해당합니다.

어떻게 든 시간과 가치를 얻을 수 있습니까(함수 또는 다른 것을 통해)?

\\\\

더 광범위한 질문은 다음과 같이 할 수 있습니다. 시간과 가격을 한 번에 얻을 수 있는 개체(추세선, 피보나치선, 간 제외)가 있습니까?

차트에 표시를 하고 정보를 가져와야 합니다. 트렌드를 그립니다. 라인, fibo 등 - 끔찍하게 번거롭고 느림...

답변 감사합니다!

추신: 이제 막 배우기 시작했습니다...

 
ilmel :

안녕 모두!

차트에 이러한 그래픽 개체가 있습니다.

매개변수에서 시간, 가치, 코드. 값은 개체가 위치한 가격에 해당합니다.

어떻게 든 시간과 가치를 얻을 수 있습니까(함수 또는 다른 것을 통해)?

\\\\

더 광범위한 질문은 다음과 같이 할 수 있습니다. 시간과 가격을 한 번에 얻을 수 있는 개체(추세선, 피보나치선, 간 제외)가 있습니까?

차트에 표시를 하고 정보를 가져와야 합니다. 트렌드를 그립니다. 라인, fibo 등 - 끔찍하게 번거롭고 느림...

답변 감사합니다!

추신: 이제 막 배우기 시작했습니다...

https://docs.mql4.com/ru/objects/objectgetdouble
https://docs.mql4.com/en/objects/objectgetinteger
사유: