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

 
alvlaf :

귀하가 제공한 마지막 코드는 이미 한 단계 발전한 것입니다. 거래를 전혀 열지 않습니다(즉, 금지가 적용됨을 의미함). 왜 아무도 없는지 이해할 때까지. 첨부된 것은 잡지의 스크린샷입니다.

처음에는 변수 이름이 ProfitableSerie이고 반대 기능을 가졌을 뿐입니다. 그리고 한 가지 더 덧붙이자면

 int OnInit ()                     // abeiks && LRA: замечания приняты)))
{
   if (! GlobalVariableCheck ( "AllowNewOrders" )) GlobalVariableSet ( "AllowNewOrders" , 1 );
   return ( INIT_SUCCEEDED );
}

// OnDeinit больше не нужен

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);
         return;
      }
      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);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0 ) // Если последняя сделка прибыльная, то открывается ордер
      {
         if ( GlobalVariableGet ( "AllowNewOrders" ) > 0 ) return ;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal ())
         {
            ticket = OrderSend ( Symbol (), OP_BUY, Lots, Ask, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
             if (ticket> 0 ) GlobalVariableSet ( "AllowNewOrders" , 0 );
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal ())
         {
            ticket = OrderSend ( Symbol (), OP_SELL, Lots, Bid, Slippage, 0 , 0 , IntegerToString (Exp), Magic);
             if (ticket> 0 ) GlobalVariableSet ( "AllowNewOrders" , 0 );
            return;
         }
      }
      GlobalVariableSet ( "AllowNewOrders" , 1 );
   }
}

이 시도. 뭔가 또 나올 것 같은 느낌...

 
안녕하세요 여러분, MQL4 튜토리얼을 읽기 시작했는데(프로그래밍 방법을 배우고 싶습니다) 구버전이 있는데 어떤 것을 추천하나요? 튜토리얼을 읽고 문서를 읽어볼까요?
 
LRA :
// ИХМО так нагляднее
동의한다!
 
linar :

안녕하세요 여러분, MQL4 튜토리얼을 읽기 시작했는데(프로그래밍 방법을 배우고 싶습니다) 구버전이 있는데 어떤 것을 추천하나요? 튜토리얼을 읽고 문서를 읽어볼까요?

이전에 C로 프로그래밍한 적이 있다면 무료로 제공되는 더 간단한 표시기 및 조언자의 소스를 보고 도움말을 읽는 것이 좋습니다.

프로그래밍을 전혀 하지 않았다면... 더 간단한 무료 표시기 및 조언자의 소스를 보고 도움말을 읽으십시오. )))

이 포럼에는 튜토리얼도 있습니다: https://www.mql5.com/en/forum/108883

 
A13ksandr :

처음에는 변수 이름이 ProfitableSerie이고 반대 기능을 가졌을 뿐입니다. 그리고 한 가지 더 덧붙이자면

이 시도. 뭔가 또 나올 것 같은 느낌...

한 걸음 더 나아가 - 봇이 하나의 거래를 열었지만 그것이 끝이었습니다. 다른 것은 열리지 않으며 어떤 시도에 대한 로그에도 메시지가 없습니다.
 
alvlaf :
한 걸음 더 나아가 - 봇이 하나의 거래를 열었지만 그것이 끝이었습니다. 다른 것은 열리지 않으며 어떤 시도에 대한 로그에도 메시지가 없습니다.

젠장, 처음에는 코드의 일부만 올바르게 삽입하고 싶었지만 모두 복사했는데 이 오류가 수정되지 않았습니다. 마지막 조건에서 이렇게 되어야 합니다.

         if ( GlobalVariableGet ( "AllowNewOrders" ) == 0 ) return ;

그러나 일반적으로 그는 단일 거래를 체결해서는 안됩니다. 처음 두 조건 중 하나가 제대로 작동하지 않습니다. 지금 당장 수정하세요, 우리는 볼 것입니다 :)

업데이트: 만일을 대비하여 OnDeinit를 다시 가져오세요.

 void   OnDeInit()
{
   GlobalVariableSet ( "AllowNewOrders" , 1 ); 
} 
 
A13ksandr :

젠장, 처음에는 코드의 일부만 올바르게 삽입하고 싶었지만 모두 복사했는데 이 오류가 수정되지 않았습니다. 마지막 조건에서 이렇게 되어야 합니다.

그러나 일반적으로 그는 단일 거래를 체결해서는 안됩니다. 처음 두 조건 중 하나가 제대로 작동하지 않습니다. 지금 당장 수정하세요, 우리는 볼 것입니다 :)

업데이트: 만일을 대비하여 OnDeinit를 다시 가져오세요.


나는 그것을 시도했는데, 한 번의 적자 거래 후 매 틱마다 포지션을 열기 시작했습니다.
 
alvlaf :
나는 그것을 시도했고, 빨간색에서 한 번의 거래 후에 각 틱에서 포지션을 열기 시작했습니다.

첫 번째 줄에 처음 두 조건을 입력하십시오.

if ( GlobalVariableGet ("AllowNewOrders") == 1) 반환;

그리고 한 쌍에서 첫 번째 테스트를 시도하십시오.

브로커 그랜드캐피탈?

 
A13ksandr :

첫 번째 줄에 처음 두 조건을 입력하십시오.

if (GlobalVariableGet("AllowNewOrders") == 1) 반환;

그리고 한 쌍에서 첫 번째 테스트를 시도하십시오.

브로커 그랜드캐피털?

//------------------------------------------------ ----------------------
int OnInit()
{
if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
반환(INIT_SUCCESSED);
}

//------------------------------------------------ ----------------------

무효 OnDeInit()
{
GlobalVariableSet("AllowNewOrders",1);
}
//------------------------------------------------ ----------------------

무효 OnTick()
{
if (GlobalVariableGet("AllowNewOrders") == 1) 반환;
{
if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다.
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
// 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다.
{
GlobalVariableSet("AllowNewOrders", 0);
유형 = TypeLastHistOrder();
if (유형 == OP_BUY) 가격 = 묻기;
if (유형 == OP_SELL) 가격 = 입찰가;
로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2);
티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
반품;
}
if (GlobalVariableGet("AllowNewOrders") == 1) 반환;
{
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// 마지막 거래의 이익이 0이면 동일하게 엽니다.
{
GlobalVariableSet("AllowNewOrders", 0);
유형 = TypeLastHistOrder();
if (유형 == OP_BUY) 가격 = 묻기;
if (유형 == OP_SELL) 가격 = 입찰가;
많은 = NormalizeDouble(LotsLastHistOrder(), 2);
티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
반품;
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다.
{
if (GlobalVariableGet("AllowNewOrders") == 0) 반환;
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
if (티켓>0) GlobalVariableSet("AllowNewOrders", 0);
반품;
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
티켓 = OrderSend(Symbol(), OP_SELL, 랏, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
if (티켓>0) GlobalVariableSet("AllowNewOrders", 0);
반품;
}
}
}
GlobalVariableSet("AllowNewOrders", 1);
}
}

}

네, 그랜드 캐피탈입니다. 올바르게 삽입되었습니까? 그가 다시 거래 개시를 중단한 것.

 

얘들아, 난 이미 내 머리를 부숴버렸어. 어드바이저가 고점과 저점에 대한 지연을 설정하도록 하는 방법, 예를 들어 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으로 설정됩니다. 어디로 가는지 명확하지 않습니다.

사유: