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

 
mladen:
설명하기 쉽지 않다

새로운 틱이 생성되고 필요한 루틴을 실행해야 함을 (지표에서) "알릴" 이벤트를 오프라인 차트로 보내야 합니다. 낮은 수준의 기능을 사용하는 것을 의미합니다. 전체는 다음과 같이 보일 수 있습니다.

#include

#import "user32.dll"

int GetParent(int hWnd);

#import

#define CHART_CMD_UPDATE_DATA 33324

void UpdateChartWindows()

{

int filePeriod = 1; // file period

string fileSymbol = "your offline symbol name";

string chartName = "your offline symbol chart full name";

string stringForName = " ";

//

//

//

//

//

int windowHandle = WindowHandle(fileSymbol,filePeriod);

if (windowHandle != 0)

{

windowHandle = GetParent(windowHandle);

windowHandle = GetWindow(windowHandle,GW_HWNDFIRST);

while (windowHandle != 0)

{

int len = GetWindowTextA(windowHandle,stringForName,80);

if (len > 0 && StringSubstr(stringForName,0,len) == chartName)

PostMessageA(windowHandle,WM_COMMAND,CHART_CMD_UPDATE_DATA,0);

windowHandle = GetWindow(windowHandle,GW_HWNDNEXT);

}

}

}

감사합니다 확인 하겠습니다. 그러나 나는 sendorder에 대한 문제를 올바르게 찾습니다. 내 지표는 비표준 오프라인 차트의 이름을 생성하고 이러한 이유로 플랫폼은 열지 않습니다.

당신의 무책임에 감사합니다

 

알겠습니다. 오프라인 차트에 대한 문제가 진행 중입니다.

다른 문제가 있습니다.

특정 규칙으로 볼륨을 계산하는 지표를 만들어야 합니다.

내가 필요한 것은 틱의 변화가 있을 때마다 표시기가 스윙의 길이를 계산해야 한다는 것입니다.

예시.

on Open candel 값 버퍼 는 0입니다. 따라서 되돌림 전에 수행된 모든 틱을 계산해야 하지만 반환되는 궁극적인 값은 캔들 마감 이후 가장 높은 값입니다.

그 후, 버퍼에서 반환된 가장 높은 범위에 대해 수행된 이동 관련 히스토그램의 색상을 설정해야 합니다.

나는 다른 방법으로 시도하지만 성공하지 않습니다.

히익^^.

고맙습니다

 

모든 지원에 감사드립니다. 나는 더 많이 배우고 당신의 모든 도움으로 내 모든 요청을 수정합니다...하지만.

하나 더 있어요^^.

회수할 void 함수 를 만들어야 하며 이 두 코드를 병합해야 합니다.

첫 번째는 마지막 openorder를 찾습니다. 두 번째는 openprice가 더 높은 openorder의 수를 찾습니다.

openorderprice가 가장 높은 주문 번호를 직접 갖기 위해 하나의 기능을 수행해야 합니다.

고맙습니다

for(int i = OrdersTotal()-1; i>= 0; i--) {

OrderSelect(i, SELECT_BY_POS);

if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {

if(TYPE == OP_BUY) {

double OPrice = OrderOpenPrice();[/PHP]

[PHP]for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>test(OP_BUY) Hbuys++;

}

}

}

return(Hbuys);

}

 
dasio:
모든 지원에 감사드립니다. 나는 더 많이 배우고 당신의 모든 도움으로 내 모든 요청을 수정합니다...하지만.

하나 더 있어요^^.

회수할 void 함수를 만들어야 하며 이 두 코드를 병합해야 합니다.

첫 번째는 마지막 openorder를 찾습니다. 두 번째는 openprice가 더 높은 openorder의 수를 찾습니다.

openorderprice가 가장 높은 주문 번호를 직접 갖기 위해 하나의 기능을 수행해야 합니다.

고맙습니다

for(int i = OrdersTotal()-1; i>= 0; i--) {

OrderSelect(i, SELECT_BY_POS);

if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {

if(TYPE == OP_BUY) {

double OPrice = OrderOpenPrice();[/PHP]

for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>test(OP_BUY) Hbuys++;

}

}

}

return(Hbuys);

}

두 번째 코드에서 오류가 발생했습니다. 맞아요

[PHP]for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) 중단;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(유형 == OP_BUY) {

if(OrderOpenPrice()>OPrice Hbuys++;

}

}

}

반환(Hbuys);

}

 

다시오

void 함수 는 값을 반환하지 않는 함수입니다. 그렇다면 그렇게 하는 유일한 합리적인 방법은 함수에 대한 참조로 전달될 일부 변수를 사용하는 것입니다(내 경험에 따르면 해당 목적으로 전역 범위 변수를 사용하는 것은 매우 나쁜 습관입니다. 구조화된 코딩 규칙을 피하고, 그리고 오류를 찾아야 하는 경우 이러한 변수를 사용하는 것은 악몽입니다. 그게 당신이 염두에 두었습니까?

dasio:
두 번째 코드에서 오류가 발생했습니다. 맞아요
for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>OPrice Hbuys++;

}

}

}

return(Hbuys);

}

 
mladen:
dasio void 함수는 값을 반환하지 않는 함수입니다. 그렇다면 그렇게 하는 유일한 합리적인 방법은 함수에 대한 참조로 전달될 일부 변수를 사용하는 것입니다(내 경험에 따르면 해당 목적으로 전역 범위 변수를 사용하는 것은 매우 나쁜 습관입니다. 구조화된 코딩 규칙을 피하고, 그리고 오류를 찾아야 하는 경우 이러한 변수를 사용하는 것은 악몽입니다. 그게 당신이 염두에 두었습니까?

당신의 답변에 감사드립니다,

나는 가장 높은 openorder와 가장 낮은 openorderm이 열린 마지막 구매 주문을 존중하는 구매 수만 필요합니다.

나는 몇 가지 검사를 위해 결과를 어떻게 vois 함수 로 사용해야 합니다.

따라서 요청 시 이 레코드를 호출하는 것이 훨씬 간단합니다. 어쩌면 이런 식으로 간단하게 기억할 수 있습니다. CalculateCurrentBuy(Symbol())

int CalculateHighestbuy(string symbol) {

int Hopen=0;

for(int i=0;i<OrdersTotal();i++) {

code here

}

}

return(Hopen);

}

 

후행 그리드?

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){

OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){

OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

}[/CODE]

I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.

[CODE] void TrailingOrders() {

if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {

if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);

}

}

if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {

if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);

}

}

}

이 코드는 2개의 주문을 추적하지만 더 추적하도록 수정하려면 어떻게 해야 합니까? 위의 그리드 코드와 같이 여러 수준에 대해 후행 코드를 설정하려고 하자마자 커스터드로 바뀝니다.

어떤 통찰력이라도 감사하겠습니다.

감사합니다

 

...

다음 코드로 시도했는데 정상적으로 작동합니다(예제 그림 참조: 다른 단계가 이미 적용됨)

s.ticketP 및 b.ticketP 변수가 무엇인지 몰라서 코드에서 볼 수 있는 방식으로 사용했습니다.

extern double Trail.SELLSTOP.Orders.Distance = 15;

extern double Trail.BUYSTOP.Orders.Distance = 20;

extern int Stop.Order.Levels = 4;

extern double Sell.Lots = 0.1;

extern double Sell.Multiplier = 0.1;

extern double Buy.Lots = 0.1;

extern double Buy.Multiplier = 0.2;

extern bool Set.SELLSTOP = true;

extern bool Set.BUYSTOP = true;

int init()

{

return(0);

}

int start()

{

double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;

static int s.ticketP=0;

static int b.ticketP=0;

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}

}

s.ticketP=Stop.Order.Levels;

b.ticketP=Stop.Order.Levels;

return(0);

}

cja:
for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){

OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){

OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

}[/CODE]

I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.

[CODE] void TrailingOrders() {

if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {

if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);

}

}

if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {

if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);

}

}

}

이 코드는 2개의 주문을 추적하지만 더 추적하도록 수정하려면 어떻게 해야 합니까? 위의 그리드 코드와 같이 여러 수준에 대해 후행 코드를 설정하려고 하자마자 커스터드로 바뀝니다.

어떤 통찰력이라도 감사하겠습니다.

감사합니다
파일:
stopd.gif  36 kb
 

후행 그리드

mladen:

다음 코드로 시도했는데 정상적으로 작동합니다(예제 그림 참조: 다른 단계가 이미 적용됨)

s.ticketP 및 b.ticketP 변수가 무엇인지 몰라서 코드에서 볼 수 있는 방식으로 사용했습니다.

extern double Trail.SELLSTOP.Orders.Distance = 15;

extern double Trail.BUYSTOP.Orders.Distance = 20;

extern int Stop.Order.Levels = 4;

extern double Sell.Lots = 0.1;

extern double Sell.Multiplier = 0.1;

extern double Buy.Lots = 0.1;

extern double Buy.Multiplier = 0.2;

extern bool Set.SELLSTOP = true;

extern bool Set.BUYSTOP = true;

int init()

{

return(0);

}

int start()

{

double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;

static int s.ticketP=0;

static int b.ticketP=0;

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}

}

s.ticketP=Stop.Order.Levels;

b.ticketP=Stop.Order.Levels;

return(0);

}

안녕하세요 mladen님

도움을 주셔서 감사합니다. 그러나 위의 게시물에서 제 자신을 명확하게 밝히지 않았을 수 있습니다. 그리드를 설정하는 데 문제가 없습니다. 내가 가진 문제 는 순서 분리를 잃지 않고 그리드를 추적하는 것입니다.

s.ticketP & b.ticketP는 단순히 EA의 다른 곳에서 사용되는 BUYSTOP & SELLSTOP 보류 주문 코드를 나타냅니다.

감사합니다

 

후행 그리드

cja:
안녕하세요 mladen님

도움을 주셔서 감사합니다. 그러나 위의 게시물에서 제 자신을 명확하게 밝히지 않았을 수 있습니다. 그리드를 설정하는 데 문제가 없습니다. 내가 가진 문제 는 순서 분리를 잃지 않고 그리드를 추적하는 것입니다.

s.ticketP & b.ticketP는 단순히 EA의 다른 곳에서 사용되는 BUYSTOP & SELLSTOP 보류 주문 코드를 나타냅니다.

감사합니다

안녕하세요 mladen님

이거 볼 시간 있나요?

친절한 인사 CJA

사유: