여기 프로젝트의 .cpp 파일이 있습니다. 이 파일을 보고 Google과 Yandex에 몇 번 가보겠습니다. 머리를 깨는 어떤 것도 발견하지 못했습니다. 전체적으로 이해할 수 있습니다. 심지어 간단해 보입니다.
하지만 어떻게 작동합니까?? EA 코드에서 이 ddl에 액세스하는 방법을 잘 이해하지 못했습니다. 어떻게? 먼저 #include <GetIntValue> 와 같습니다. 아니요, 뭔가 잘못되었습니다..
대략 이렇습니다. 그것을 작동시키려면 DLL을 컴파일하고 그것을 전문가/라이브러리 폴더에 넣어야 합니다(도움말과 튜토리얼을 읽으십시오. 모든 것이 거기에 자세히 설명되어 있습니다).
//сначала надо объявить импорт функции из DLL#import "имя_вашей_длл.dll"int SortStringArray( string *arr[], constint arraysize);
#import
//в тексте программы вызов проще простогоstring arr[];
int size;
...
//где-то в коде массив заполняется
...
//а вот и вызов сортировки
SortStringArray(arr,size);
2. dll을 호출할 때 스튜디오를 계속 켜둘 필요는 없잖아요? 어떻게 수행됩니까?
DLL은 간단히 말해서 일반적인 Windows 프로그램입니다. 단, Dll에 구현된 기능은 사용자가 호출하는 것이 아니라 다른 프로그램에서 호출하는 것입니다. 이를 가능하게 하기 위해 C++ 언어 컴파일러에 __declspec(dllexport) 수정자를 지정합니다.
이 EA의 오류 처리 기능에 129 및 138 오류에 대한 검사를 추가할 가치가 있다고 생각하십니까?
그렇다면 어떻게 해야 할까요?
최소한 모든 오류를 처리하는 포지션 개설/주문 설정을 위한 고유한 기능이 있어야 합니다. 그것은 당신이 최신 가격을 얻을 필요가 있다는 것입니다.
어떤 빌드도 보지 않았습니다. 그러나 나는 말할 것입니다. Expert Advisor에서 서버에서 반환된 모든 오류를 처리해야 합니다. 그리고 이것으로 충분하지 않습니다. 그는 기능의 손실과 알고리즘의 실패 없이 예측하지 못한 상황이 발생했을 때 자신의 위치를 차지할 수 있어야 하며 특별한 일이 없었던 것처럼 작업을 계속할 수 있어야 합니다.
최소한 모든 오류를 처리하는 포지션 개설/주문 설정을 위한 고유한 기능이 있어야 합니다. 그것은 당신이 최신 가격을 얻을 필요가 있다는 것입니다.
어떤 빌드도 보지 않았습니다. 그러나 나는 말할 것입니다. Expert Advisor에서 서버에서 반환된 모든 오류를 처리해야 합니다. 그리고 이것으로 충분하지 않습니다. 그는 기능의 손실과 알고리즘의 실패 없이 예측하지 못한 상황이 발생했을 때 자신의 위치를 차지할 수 있어야 하며 특별한 일이 없었던 것처럼 작업을 계속할 수 있어야 합니다.
여기 프로젝트의 .cpp 파일이 있습니다. 이 파일을 보고 Google과 Yandex를 몇 번 가보겠습니다. 머리를 깨는 어떤 것도 발견하지 못했습니다. 전체적으로 이해할 수 있습니다. 심지어 간단해 보입니다.
하지만 어떻게 작동합니까?? EA 코드에서 이 ddl에 액세스하는 방법을 잘 이해하지 못했습니다. 어떻게? 먼저 #include <GetIntValue> 와 같습니다. 아니요, 뭔가 잘못되었습니다..
2. dll을 호출할 때 포함된 스튜디오를 그대로 둘 필요는 없잖아요? 어떻게 수행됩니까?
mql 코드에서 동일한 dll에 액세스하는 가장 간단한 예를 보여주세요.
여기서 이해가 안되는게..
두 번째 단방향 주문이 열리면 로트 크기가 기하급수적으로 증가해야 합니다(2의 승수로).
이것은 결과입니다
그럼 이렇게
이것은 결과입니다
그럼 이렇게
감사합니다. 생각의 기차를 이해했습니다. 더 정확하게 알아 냈습니다.
이 줄은 무엇을 위한 것입니까?
datetime o;
여기 또 다른 질문이 있습니다. 트레일러가 있습니다. 1개의 단방향 주문이 열리면 모든 것이 훌륭하게 작동합니다. 그 이상이면 어떤 이유로 작동하지 않습니다. 왜요?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
여기 프로젝트의 .cpp 파일이 있습니다. 이 파일을 보고 Google과 Yandex에 몇 번 가보겠습니다. 머리를 깨는 어떤 것도 발견하지 못했습니다. 전체적으로 이해할 수 있습니다. 심지어 간단해 보입니다.
하지만 어떻게 작동합니까?? EA 코드에서 이 ddl에 액세스하는 방법을 잘 이해하지 못했습니다. 어떻게? 먼저 #include <GetIntValue> 와 같습니다. 아니요, 뭔가 잘못되었습니다..
대략 이렇습니다. 그것을 작동시키려면 DLL을 컴파일하고 그것을 전문가/라이브러리 폴더에 넣어야 합니다(도움말과 튜토리얼을 읽으십시오. 모든 것이 거기에 자세히 설명되어 있습니다).
2. dll을 호출할 때 스튜디오를 계속 켜둘 필요는 없잖아요? 어떻게 수행됩니까?
여기 또 다른 질문이 있습니다. 트레일러가 있어요. 1개의 단방향 주문이 열리면 모든 것이 훌륭하게 작동합니다. 그 이상이면 어떤 이유로 작동하지 않습니다. 왜요?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
함수에 매개변수를 전달해야 하므로 다음을 시도하십시오.
부울 IfProfTrail=거짓; // 수익성 있는 포지션에만 사용 - 손익분기점 모드
int TrailingStop=0; // 후행 거리 = 0 - 최소 허용
int TrailingStep=1; // 거리 스텝
정말 감사합니다!
이제 문제가 무엇인지 명확해졌습니다.
구입에 사용:
내가 아는 한, 구매는 요청에 의해 진행되고 iClose(Symbol(),Period(),0)는 입찰에서 가격을 가져옵니다. 결과적으로 오류가 발생할 가능성이 있습니다.
그러나 어드바이저가 핍이 아니기 때문에 가격이 오랫동안 매수 영역에 있었고 매 틱마다 업데이트되기 때문에 즉시 문제가 발생합니다.이제 다음 조합을 사용합니다.
거래가 열리지 않는 이유는 무엇입니까? 고문이 오류로 멈추고 더 이상의 가격 변화가 보이지 않는 것으로 나타났습니까?
여기에서 Expert Advisor 템플릿을 가져왔습니다. https://c.mql5.com/mql4/book/mq4/experts/tradingexpert.mq4
이 EA의 오류 처리 기능에 129 및 138 오류에 대한 검사를 추가할 가치가 있다고 생각하십니까?
그렇다면 어떻게 해야 할까요?
최소한 모든 오류를 처리하는 포지션 개설/주문 설정을 위한 고유한 기능이 있어야 합니다. 그것은 당신이 최신 가격을 얻을 필요가 있다는 것입니다.
어떤 빌드도 보지 않았습니다. 그러나 나는 말할 것입니다. Expert Advisor에서 서버에서 반환된 모든 오류를 처리해야 합니다. 그리고 이것으로 충분하지 않습니다. 그는 기능의 손실과 알고리즘의 실패 없이 예측하지 못한 상황이 발생했을 때 자신의 위치를 차지할 수 있어야 하며 특별한 일이 없었던 것처럼 작업을 계속할 수 있어야 합니다.
최소한 모든 오류를 처리하는 포지션 개설/주문 설정을 위한 고유한 기능이 있어야 합니다. 그것은 당신이 최신 가격을 얻을 필요가 있다는 것입니다.
어떤 빌드도 보지 않았습니다. 그러나 나는 말할 것입니다. Expert Advisor에서 서버에서 반환된 모든 오류를 처리해야 합니다. 그리고 이것으로 충분하지 않습니다. 그는 기능의 손실과 알고리즘의 실패 없이 예측하지 못한 상황이 발생했을 때 자신의 위치를 차지할 수 있어야 하며 특별한 일이 없었던 것처럼 작업을 계속할 수 있어야 합니다.
템플릿은 교과서에서 가져왔습니다. 현재 오류 처리 기능이 특히 강력하지 않습니다.
주문을 시작할 때 RefreshRates()가 있습니다. (비딩과 매도는 그들이 말한 대로 시장 정보를 통해 대체됨)
그리고 오류 처리 기능:
물어보고 싶었다. 예를 들어 다음과 같이 129 오류에서 다음 줄을 추가할 수 있습니까?