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

 
yan720 :

답변 해주셔서 감사합니다. 그런 질문이 나왔다는 사실에 놀랐습니다. 하지만 내가 본 것과 질문의 원인을 잘못 이해했을 수도 있습니다.

저는 지금 다른 사람의 코드를 보고 어떤 방식으로(내 것과는 다르고 아마도 더 효율적일 수도 있음) 특정 알고리즘이 구현되는지 확인하고 있습니다. 이제 저는 악명 높은 Ilan 1.6 EA(첨부)를 보고 있습니다. 여러 조각으로 조립했다가 다시 조립한 모습을 볼 수 있습니다. 그러나 337행에서 사용자 정의 후행 중지 기능이 선언되었습니다(비록 처음에는 사용 플래그가 0으로 강제 설정되었지만). 이 함수는 52행에서 호출됩니다.

앞서 언급한 후행 정지가 손절매로 미결 주문(그리고 여러 개 있을 수 있음)을 수정하고 원래의 이익을 유지하지만 이러한 주문을 시작 가격(OrderModify 함수의 두 번째 매개변수)으로 설정하기 때문에 내 질문이 제기되었습니다. 동일한 값(AveragePrice , 173 및 178행에서 계산됨).

또는 오픈 주문을 수정할 때 이 매개변수(오픈 가격)는 단순히 서버에서 고려되지 않고 가격을 설정할 수 있습니까?

시장 위치를 수정할 때 가격이 설정되어야 하며 위치 개시 가격과 동일해야 합니다: OrderOpenPrise()

추신 내가 당신이라면 이 코드에서 "효율적인 알고리즘"을 찾지 않을 것입니다. 사람들이 거기에서 코드를 작성하고 거기에서 수행한 작업을 실제로 이해하지 못한 것 같습니다 ...

 
네이트
 Alert ( "Исполнение программы" );
     double p[ 100 ];
     int i = 0 ;
     int n = OrdersTotal ();
     int t = 0 ;
    
     for (i= 0 ; i<=n+ 1 ; i++)
    {
    
     OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
     if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== true )
     {
     
      p[i+ 1 ] = OrderProfit();       // р - це прибуток ордера
     
     } 
    }
     for (i= 0 ; i<=n+ 1 ; i++)
    {
     if (p[i+ 1 ]> 0 )                   // якщо ордер прибутковий, то його 
    {
       Alert ( "Є прибуток ордер " ,i+ 1 );
       OrderSelect (i+ 1 ,SELECT_BY_POS,MODE_TRADES); 
       Alert ( "Маємо помилку " , GetLastError ());
       Alert ( "Вибрали ордер " ,i+ 1 );
       double ld_Price;
       if (OrderType() == 0 ) ld_Price = NormalizeDouble (Bid, Digits );
       else ld_Price = NormalizeDouble (Ask, Digits );
      OrderClose (OrderTicket(), OrderLots(), ld_Price, 2 );   // треба зачинити 
       Alert ( "Маємо помилку " , GetLastError ());
       Alert ( "Закрили ордер " ,i+ 1 ); 
       if ( OrderType()==OP_BUY)                               //  в залежності від того, якого типу ордер ми зачинили
       { 
         Alert ( "Ордер типу бай" );
         OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,Bid- 25 * Point ,Ask+ 25 * Point );   // змінюється порядок відкривання наступних ордерів
         Alert ( "Відкрили ордер типу селл" );
         Sleep ( 10000 );
         OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 3 ,Bid- 25 * Point ,Ask+ 25 * Point );
         Alert ( "Відкрили ордер типу бай" );
        } else
      {
         OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 3 ,Bid- 25 * Point ,Ask+ 25 * Point );
         Alert ( "Відкрили ордер типу бай" );
         Sleep ( 10000 );
         OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,Bid- 25 * Point ,Ask+ 25 * Point );    
         Alert ( "Відкрили ордер типу селл" );
      }
    } 
   } 
     Alert ( "Последняя ошыбка " , GetLastError ()); 
//----
   return ( 0 );
  }

"바보"가 친절하다는 것을 찾으려면 파스칼에 의해 고통받는 사람들을 불쌍히 여기십시오.

 
artmedia70 :
시장 위치를 수정할 때 가격이 설정되어야 하며 위치 개시 가격과 동일해야 합니다: OrderOpenPrise()

그러면 이 기능이 작동하지 않을 것 같습니까? 나는 그것을 테스트하지 않았지만 그것이 작동하는 코드의 일부인 것 같습니다(이 Ilan은 최소한 디버깅된 것으로부터 분명히 재구축되었습니다). 아니면 여전히 서투른 코드입니까?

 void TrailingAlls( int pType, int stop, double AvgPrice) {
   int profit;
   double stoptrade;
   double stopcal;
   if (stop != 0 ) {
       for ( int trade = OrdersTotal () - 1 ; trade >= 0 ; trade--) {
         if ( OrderSelect (trade, SELECT_BY_POS, MODE_TRADES)) {
             if (OrderSymbol() != Symbol () || OrderMagicNumber() != MagicNumber) continue ;
             if (OrderSymbol() == Symbol () || OrderMagicNumber() == MagicNumber) {
               if (OrderType() == OP_BUY) {
                  profit = NormalizeDouble ((Bid - AvgPrice) / Point , 0 );
                   if (profit < pType) continue ;
                  stoptrade = OrderStopLoss();
                  stopcal = Bid - stop * Point ;
                   if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal > stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0 , Aqua);
               }
               if (OrderType() == OP_SELL) {
                  profit = NormalizeDouble ((AvgPrice - Ask) / Point , 0 );
                   if (profit < pType) continue ;
                  stoptrade = OrderStopLoss();
                  stopcal = Ask + stop * Point ;
                   if (stoptrade == 0.0 || (stoptrade != 0.0 && stopcal < stoptrade)) OrderModify(OrderTicket(), AvgPrice, stopcal, OrderTakeProfit(), 0 , Red);
               }
            }
             Sleep ( 1000 );
         }
      }
   }
}
 
안녕하세요, 당신은 3개의 캔들 전략에 대한 고문을 작성 해야 합니다. 거래는 시장 소음이 없는 Renko 차트에서 수행됩니다. 한 방향으로 3개의 연속 막대가 있는 상태에서 매수 또는 매도 주문을 열고 손절매를 선행 막대의 상단, 양초를 닫은 후 손절매를 선행 막대로 이동
 
artmedia70 :

추신 내가 당신이라면 이 코드에서 "효율적인 알고리즘"을 찾지 않을 것입니다. 사람들이 거기에서 코드를 작성하고 거기에서 수행한 작업을 실제로 이해하지 못한 것 같습니다 ...

예, 코드는 많은 중복성 등으로 매우 구체적입니다. 그러나 저는 알고리즘 자체에는 그다지 관심이 없지만 기본 아이디어를 구현하는 접근 방식에는 관심이 없습니다. 전체적인 그림을 보고 있습니다. 별도의 기능에서 꺼내는 것, 내 것과 달리 동일한 후행이 구현되는 방법 등 나는 독학이며 나에게 유용합니다. :)
 
artmedia70 :
올바른 장소에 - 어느 것이 있습니까?


예를 들어 이미 1200포인트 자리에 주문이 있고.. 예를 들어 가격이 떨어지고 별이 줄지어 있어서 이 곳에서 주문을 해야 하는 .. 그리고 주문은 이미 서서 한 번에 하나씩 2개의 주문을 넣지 않도록 잔액을 필요한 금액 아래로 낮추지 않도록 합시다.
 
yan720 :

그러면 이 기능이 작동하지 않을 것 같습니까? 나는 그것을 테스트하지 않았지만 그것이 작동하는 코드의 일부인 것 같습니다(이 Ilan은 최소한 디버깅된 것으로부터 분명히 재구축되었습니다). 아니면 여전히 서투른 코드입니까?

음... 코드는 진짜가 아닙니다. 적어도.

 
친애하는 프로그래머, 누군가 몇 분의 여유 시간이 있으면 응답해 주십시오. 문제의 핵심은 이것이다. 표준 MACD를 단순 Expert Advisor로 다시 만들고 싶지만 프로그래밍에서는 완전한 0입니다.
그리고 고문 고문이 하나의 주문으로 작동하지 않고 그리드, 중지 및 마술로 작동하도록 변경하고 싶습니다.
추가하고 싶은 변수는 다음과 같습니다.
Stoploss =는 전체 그리드에 대해 동일한 수준에 있습니다. 예를 들어 EUR / USD = 200pp와 같습니다. 그리드의 모든 주문에 대해 1.3450 수준에 있습니다.
MaxOpenOrder = 그리드의 최대 주문 수(예: if=3인 경우 그리드의 최대 주문 수). 주문 수는 3입니다
Dist = 주문 간 거리(지연)

Lommmultiplicator = 다음 그리드 순서의 로트 증가 계수.

매직 = 매직 넘버

트랜잭션 종료는 소스 코드에서와 같이 수행됩니다. 모든 그리드 오더는 1차 오더를 마감하는 순간에 마감됩니다.

그게 다야
누군가 응답하면 나는 매우 감사 할 것입니다!
누군가 이미 가지고 있을 수도 있습니다. 생명을 불어넣은 기성품 Expert Advisor도 작동합니다.
 
sannin :

예를 들어 이미 1200포인트 자리에 주문이 있고.. 예를 들어 가격이 떨어지고 별이 줄지어 있어서 이 곳에서 주문을 해야 하는 .. 그리고 주문은 이미 서서 한 번에 하나씩 2개의 주문을 넣지 않도록 잔액을 필요한 금액 아래로 낮추지 않도록 합시다.

이 같은:

 //+----------------------------------------------------------------------------+
bool ExistOrdersByPrice( string sy, int op, int mn, double pp) {
   int i, k= OrdersTotal ()- 1 ;
   for (i=k; i>= 0 ; i--) {
       if ( OrderSelect (i,SELECT_BY_POS)) {
         if (OrderMagicNumber()!=mn)   continue ;
         if (OrderSymbol()!=sy)         continue ;
         if (OrderType()!=op)           continue ;
         if ( MathAbs (OrderOpenPrice()-pp)< 0.5 * Point ) return ( true );
         }
       else Print ( "FUNC ExistOrdersByPrice() : ошибка выбора ордера " + GetLastError ());
      }
   return ( false );
}
//+----------------------------------------------------------------------------+

Magic에서 1.35000의 가격으로 현재 기호에 BuyStop 주문이 있는지 확인하기 위해 함수를 호출합니다.

 //+----------------------------------------------------------------------------+
   if (!ExistOrdersByPrice( Symbol (), OP_BUYSTOP, Magic, 1.35000 )) {
       // тут код, если нет такого ордера
      }
   else {
       // тут код, если есть такой ордер
      }
//+----------------------------------------------------------------------------+
 
atztek :

문서에 대해 이야기하는 경우 MetEditor에서 단어를 선택하고 F1을 누르십시오. 또는 온라인, 예를 들면:
https://docs.mql4.com/en/customind/SetLevelStyle

물론 감사하지만 질문을 읽기에 너무 게으르다면 답변의 요점이 무엇입니까? 표시기의 레벨 작업에 사용할 수 있는 두 가지 기능에서 해당 값, 두께, 색상 및 스타일을 변경할 수 있습니다. 하지만 설명에 액세스할 수 없습니다. 다시 말하지만 답을 아는 사람이 있습니까? 어쩌면 직면?

내가 필요한 것을 볼 수 있도록 사진을 첨부했습니다.