코딩하는 방법? - 페이지 6

 

오류 코드: 4109

모두들 안녕:

보류 중인 주문을 포함하여 모든 거래를 닫는 스크립트를 작성했지만 테스트한 후 실망했습니다. 함수: OrderClose 및 Orderdelete는 거래를 마감하는 데 실패합니다. GetLastError 함수 를 호출하면 오류 헤더 파일에 TRADE_NOT_ALLOWED로 정의된 오류 코드: 4109가 표시됩니다.

플랫폼과 함께 제공되는 스크립트를 실행하려고 시도했지만 성공하지 못했습니다.

누군가가 문제를 해결할 수 있기를 바랍니다.

감사해요,

파일:
closeall2.mq4  2 kb
 

좋아요, 이것을 시도해 보세요. 제 생각에는 Lot 및 Price 변수가 정수가 아닌 두 배여야 한다고 생각합니다. 이 도움을 바랍니다

//+------------------------------------------------------------------+

//| CloseAll.mq4 |

//| FX5 |

//| |

//+------------------------------------------------------------------+

#property copyright "FX5"

#property link " "

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

for(int i=0;i<Total;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

//+------------------------------------------------------------------+
 

이 시도

FX5:
모두들 안녕:

보류 중인 주문을 포함하여 모든 거래를 닫는 스크립트를 작성했지만 테스트한 후 실망했습니다. 함수: OrderClose 및 Orderdelete는 거래를 마감하는 데 실패합니다. GetLastError 함수를 호출하면 오류 헤더 파일에 TRADE_NOT_ALLOWED로 정의된 오류 코드: 4109가 표시됩니다.

플랫폼과 함께 제공되는 스크립트를 실행하려고 시도했지만 성공하지 못했습니다.

누군가가 문제를 해결할 수 있기를 바랍니다.

감사해요,

메타 트레이더에서 도구 -> 옵션으로 이동하여 전문 고문 탭을 클릭하고 라이브 거래 허용을 선택하고 dll 가져오기 허용을 클릭하고 통화 확인을 선택 취소합니다. 나는 몇 가지 스크립트를 작성했고 같은 문제가 발생했습니다.

 
firedave:
좋아요, 이것을 시도해 보세요. 제 생각에는 lot과 Price 변수가 정수가 아닌 두 배여야 한다고 생각합니다. 이 도움을 바랍니다
//+------------------------------------------------------------------+

//| CloseAll.mq4 |

//| FX5 |

//| |

//+------------------------------------------------------------------+

#property copyright "FX5"

#property link " "

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

//----

int Ticket,Lots,Price,Type,Result;

int Error=0;

int Total=OrdersTotal();

for(int i=0;i<Total;i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)

{

Alert("Can''t select the order indexed: ",i);

Alert("Error code is ", GetLastError());

Error++;

}

else

{

/* Lots=OrderLots();

Ticket=OrderTicket();

Type=OrderType();*/

Result=0;

/* if(Type==OP_BUY)

Price=Bid;

if(Type==OP_SELL)

Price=Ask;*/

// if(Type==OP_BUY || Type==OP_SELL)

if(OrderType()<=OP_SELL)

{

Alert(OP_BUY," ",OP_SELL," ",Type);

// Result=OrderClose(Ticket,Lots,Price,5,Blue);

if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);

if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);

}

else

{

Result=OrderDelete(OrderTicket());

}

if(Result==0)

{

Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);

Alert("Error Code: ",GetLastError());

Error++;

}

}

}

if(Error!=0)

Alert(Error," Errors have occured");

else

Alert("Close all Orders Succeeded with no Errors");

//----

return(0);

}

//+------------------------------------------------------------------+

이것은 틀릴 수 있습니다. 여러 주문을 삭제하려면 삭제 프로세스에 따라 해당 인덱스가 감소하므로 마지막 주문부터 시작해야 합니다.

따라서 " for(int i=0;i=0;i--) " 대신

 

코드 수정에 감사드립니다. 관심을 두지 않은 작은 버그였습니다.

어렴풋이, 힌트를 주셔서 대단히 감사합니다. 나는 그 해결책을 알아내기까지 한 세기를 보낼 수 있었다. 마지막으로 작업 코드가 있습니다.

 

Michel, 그것은 매우 영리한 메모였습니다. 대단히 감사합니다.

 

최대 드로다운 기능 가져오기

마감된 거래에서 최대 손실을 가져오는 함수를 작성하고 싶습니다. 나는 두 가지 해결책을 생각해 냈습니다.

1. 거래가 아직 활성화된 상태에서 드로다운을 계산합니다. 번호를 전역 변수에 저장하고 티켓 번호에 따라 파일에 데이터를 기록합니다. MT4는 항상 온라인 상태여야 합니다.

2. 1분 차트에서 가장 높은 고가 또는 가장 낮은 저가를 가져와서 드로다운을 얻습니다. 여기서 문제는 거래에 대한 1분 기록이 있어야 한다는 것입니다. (이미 다운로드되지 않은 경우 필요한 1분 막대를 얻을 수 있는 경우 이 방법을 사용합니다)

최대 드로다운을 얻는 더 좋은 방법을 찾고 싶습니다.

어떤 의견이든 환영합니다.

 
harriss:
마감된 거래에서 최대 손실을 가져오는 함수를 작성하고 싶습니다. 나는 두 가지 해결책을 생각해 냈습니다.

1. 거래가 아직 활성화된 상태에서 드로다운을 계산합니다. 번호를 전역 변수에 저장하고 티켓 번호에 따라 파일에 데이터를 기록합니다. MT4는 항상 온라인 상태여야 합니다.

2. 1분 차트에서 가장 높은 고가 또는 가장 낮은 저가를 가져와서 드로다운을 얻습니다. 여기서 문제는 거래에 대한 1분 기록이 있어야 한다는 것입니다. (이미 다운로드되지 않은 경우 필요한 1분 막대를 얻을 수 있는 경우 이 방법을 사용합니다)

최대 드로다운을 얻는 더 좋은 방법을 찾고 싶습니다.

어떤 의견이든 환영합니다.

살람 해리스,

"드로다운"은 무엇을 의미했습니까?

닫힌 거래 중 최대 손실이 발생했다는 것을 의미합니까?

 

드로우다운

내가 드로다운이라는 말은 거래에서 가장 낮은 지점이 무엇인지를 의미합니다. 예를 들어, 거래가 손절매에 도달하면 손절매는 손실이 됩니다. 이제 거래가 긍정적으로 끝나고 한 지점에서 -15핍이었다면 하락은 15가 될 것입니다. 마지막으로, 거래가 -15핍에서 마감되었지만 한 지점에서 -30이었다면 하락은 30이 될 것입니다.

 

표시기에 대한 경고/경보를 코딩하는 방법은 무엇입니까?

안녕하세요, 경고를 코딩하는 방법에 대해 자세히 알고 싶습니다.

저는 프로그래머는 아니지만 어깨가 무겁고 일반적으로 무언가를 만지작거리고, 분리하고, 내가 원하는 방식으로 더 가깝게 다시 결합할 수 있습니다.

경고가 있는 표시기 중 일부를 살펴보고 내가 본 일반 경고 기능을 경고를 원했던 다른 표시기로 복사했습니다. 나는 혼합된 결과를 얻었다.

경고에 대해 호출된 주요 함수는 Alert() 함수, Comment() 함수 및 Playsound() 함수 입니다. 지금까지는 Alert() 함수에 가장 익숙합니다. 예를 들어 Alert()와 Playsound() 사이에 큰 차이가 있습니까?

내가 가지고 있는 일반적인 문제는 경고를 코딩하는 방법을 모른다는 것입니다. 그래서 경고가 한편으로는 눈에 띄지만 다른 한편으로는 엄청나게 주의를 산만하게 하지 않습니다. 예를 들어 일부 십자가에 대해 Alert() 함수를 사용하고 표시기가 현재 막대에 최종성과 함께 인쇄되지 않은 경우 경고가 계속해서 반복될 수 있고 경고를 끄는 데 문제가 있습니다. 일반적으로 차트의 시간 프레임을 변경해야 합니다.

우선 현재 막대에 대해서만 경고를 비활성화/비활성화하는 간단한 방법이 있습니까?

둘째, 반복 횟수를 제한하거나 경고에 고정된 기간을 제공하는 코드를 도입하여 계속해서 성가신 성가신 일이 없도록 경고를 코딩하는 방법이 있습니까? 어떻게 코딩하시겠습니까?

내가 볼 수있는 한 가지 해결책은 경고가 계속 변경되지 않도록 다음 막대까지 경고를 지연하는 것입니다.

표시기의 광포한 경보의 번거로움을 피하기 위해 터미널 창을 사용하여 설정할 수 있는 미리 결정된 가격 알림을 사용했는데 도움이 되지만 이상적이지는 않습니다.

나는 또한 경고를 제공하기 위해 Expert Advisors를 만들 수 있으며 경고를 쉽게 켜고 끌 수 있는 버튼이 있다는 것도 알고 있습니다. 그러나 EA에 대한 문제는 내가 MetaTrader와 동시에 실행하는 또 다른 중요한 프로그램이 Expert Advisors가 활성화되고 느리게 실행될 때 간섭을 경험하는 것으로 보인다는 것입니다.

이 문제에 대한 다른 해결책이 있습니까?

내가 열거한 함정을 피하는 경고 코드가 있고 코딩 및 경고 방법의 좋은 예가 될 수 있는 표시기가 있다면 저를 참조하거나 게시해 주시겠습니까?

매우 감사합니다.