MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1257

 
ObjectCreate 에서 시간과 가격이 2~30포인트인 이유는 무엇입니까? 차트에 추가하려고했는데 첫 번째 포인트 만 표시됩니다
 ObjectCreate ( 0 , "name" , OBJ_ARROW_LEFT_PRICE , 0 , TimeCurrent ()- 600 , 1.29400 , TimeCurrent ()- 1200 , 1.29500 );   
 
Valerius :

이 코드를 OnInit에 작성할 필요는 없지만 OnTick()에 작성해야 합니다.

시도했지만 전혀 작동하지 않습니다.
경고 1개
 
Igor Makanu :

허용되지 않음

템플릿이 어떻게 작동하는지 설명할 수 없습니다.... 글쎄, 어떻게 - 그런 함수에 대한 호출이 있을 때까지 컴파일러는 이것의 존재에 대해 아무 것도 모릅니다(종종 없는 경우 컴파일 오류도 없습니다. 전화)

그런 다음 그러한 템플릿 함수를 호출하고 컴파일러는 필요한 유형을 대체하고 모든 것이 올바르게 작동하는지 확인합니다.

그런 다음 다른 유형의 매개변수를 사용하여 또 다른 템플릿 호출을 수행하고 컴파일러는 새 함수를 만듭니다. 하나 더, 즉, 동일한 작업을 수행하지만 매개변수 유형이 다른 2개의 함수를 2번 작성한 것처럼


휴, 그런 식으로))))



상향:

할 수 있지만 템플릿의 유형이 일치하는 경우 다음 예가 올바르게 작동합니다.

감사합니다. 부두보다 더 명확합니다.) 템플릿에서 변수를 미리 정의 해도 지정하지 않을 수 있는 것은 아닙니다. 파일로 인쇄해야 합니다. 저널은 분할 항목을 허용하지 않습니다. 매거진이 5개 없어서 아쉽습니다.) 결과적으로 템플릿을 사용하면 변수 유형을 원하는 유형으로 변환할 수 없습니다. 이는 템플릿 함수 내에서 수행할 수 있지만 변수의 수는 전체를 지정해야 합니다. 그리고 원하는 유형의 미리 정의된 변수가 있는 간단한 함수를 사용하면 호출할 때 더 적은 수의 변수를 지정할 수 있지만 변수 유형은 원하는 유형으로 캐스팅해야 합니다. 물론 이것은 호출할 때도 할 수 있지만 기록이 너무 깁니다.

 
Valerius :

좋은 오후에요 여러분!

손절매 수정 기능을 만들었습니다. 그러나 작업할 때 EURUSD,H1: OrderModify 오류 130이 표시됩니다.

게다가 가격은 손절매가 있어야 할 곳과 거리가 멀다.

다음은 함수 자체입니다.


....
    err=OrderModify(OrderTicket(), OrderOpenPrice(), New_Stop ( NormalizeDouble (OrderOpenPrice()+spred*point, 
digits)), OrderProfit(), 0 , clrNONE ); // Цена открытия плюс спред может быть в зоне заморозки.
.....
.....
double New_Stop( double Parametr) // Проверка стоп-прик.
  {
   double Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL); // Миним. дистанция
   if (Parametr<Min_Dist) // Если меньше допуст.
     {
      Parametr=Min_Dist;                         // Установим допуст.
       Alert ( "Increased the distance of a stop order or the opening price of pending orders." );
     }
   return (Parametr);                             // Возврат значения
  }
 
Valerius :

다음과 같이 시도하십시오.


감사합니다. 효과가 있었습니다!

하지만 두 가지 포인트가 더 있습니다.

1 CURRENT 주의 금요일에 열린 주문이 닫히지 않고 이전 주의 금요일에 닫히도록 하려면 어떤 조건을 추가해야 합니까?

2 코드 수정 방법 - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);

"유형 변환으로 인한 데이터 손실 가능성 " 경고 를 제거하려면? "...MarketInfo(nameSym,MODE_DIGITS)).." 부분에서 볼 수 있습니다.

 
좋은 저녁이에요. 가장 최근에 마감된 주문을 선택하는 코드는 어떻게 생겼을까요? 정말 다음과 같습니까? " OrderSelect (OrdersHistoryTotal, SELECT_BY_POS, MODE_HISTORY")?
 
제비를 합산하는 함수의 반환 값 GetAmountLotFromOpenPos는 값 -1717986918을 제공합니다. 수정 방법은 무엇입니까?
 

말해 주세요.

테스터에서 GetAmountLotFromOpenPos 로트 합산 함수의 반환 값이 -1717986918 값을 제공합니다. 어떻게 고칠 수 있습니까?

 
Valeriy Yastremskiy :

이유를 찾았습니다. OrderProft()가 아닌 OrderModify에 OrderTakeProfit()을 넣어야 했습니다. 조금 보았다.

어쨌든 도움을 주셔서 감사합니다.

 
Yerkin Sagandykov :

감사합니다. 효과가 있었습니다!

하지만 두 가지 포인트가 더 있습니다.

1 CURRENT 주의 금요일에 열린 주문이 닫히지 않고 이전 주의 금요일에 닫히도록 하려면 어떤 조건을 추가해야 합니까?

2 코드 수정 방법 - OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);

"유형 변환으로 인한 데이터 손실 가능성 " 경고 를 제거하려면? "...MarketInfo(nameSym,MODE_DIGITS)).." 부분에서 볼 수 있습니다.

첫 번째 질문에 대해 다음 기능을 만들어야 합니다.


for(int is=OrdersTotal()-1; is>=0; is--)
{
if(OrderSelect(is,SELECT_BY_POS,MODE_TRADES))
{//현재가 아닌 주의 금요일에 열린 주문 마감. 동시에 이번 주 금요일에는 주문을 마감하지 않습니다.
if(OrderMagicNumber()==매직 && TimeDayOfWeek(TimeCurrent())==5 && TimeDayOfWeek(OrderOpenTime())==5 && TimeDayOfYear(OrderOpenTime())<TimeDayOfYear(TimeCurrent()))
{
if (OrderType()==OP_BUY) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_BID),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if (OrderType()==OP_SELL) result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(nameSym,MODE_ASK),MarketInfo(nameSym,MODE_DIGITS)),3,CLR_NONE);
if(!result) {오류=GetLastError(); Print("마지막 오류 = ",오류, " ",Symbol()); }
그렇지 않으면 {오류=0;}
또 다른
{Print("NoMagic ", OrderMagicNumber());} // 디버그용
또 다른

{Print( "주문 선택 시 오류 발생 ", GetLastError());}


두 번째 질문의 경우 다음과 같아야 합니다.

OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(MarketInfo(nameSym,MODE_ASK)), 3, clrNONE);

행운을 빕니다.