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

 
Tomcat98:
안녕하세요 코더 여러분,

전문가가 거래에서 승리한 후 중지하도록 추가 코딩 라인을 코딩하는 방법은 무엇입니까?

핍은 가방에 있고 전문가는 중지 ...

감사합니다

톰캣98

코딩 경험이 있는 경우 아래를 참조하세요. 그렇지 않으면 코더를 구하십시오.

1) 각 거래가 종료된 후 OrdersHistoryTotal()에서 루프를 수행하여 거래를 확인합니다.

2) 마지막 거래 마감( OrderCloseTime() )을 확인합니다.

3) 마지막 거래인 경우 OrderProfit() == 이익을 확인합니다.

이익 == true인 경우 EndDayTrade == true && LastTradeDay == DayofYear()를 설정합니다.

이익 == false인 경우 EndDayTrade == false로 설정합니다.

4) 프로그램이 start()를 통과할 때 새로운 거래를 시작하기 전에 EndDayTrade == false인 경우 ==>를 삽입해야 합니다. 그것이 사실이기 때문에 새로운 거래를 촉발하지 않을 것입니다.

5) 새로운 날을 확인하려면 타이머 기능 이 필요합니다. (새 날이 새로운 거래를 시작하려는 것이라고 가정)

가장 간단한 형식은 if (LastDay != DayofYear() )입니다.

6) 위의 타이머 함수 내에서 LastDay = DayofYear()를 설정합니다.

if ( LastTradeDay != DayofYear() && EndDayTrade == true)

EndDayTrade == false로 설정하면 다시 시작됩니다.

사용자 정의 변수

부울 EndDayTrade = 거짓;

정수 LastTradeDay = 9999999;

정수 마지막 날 = 999999;

이 설명이 충분히 명확하기를 바랍니다.

 
dasio:
안녕,

이 두 코드를 병합하려고 하는데 문제가 있습니다.

보류 중인 주문 중 하나가 채워지면 다른 주문을 취소해야 합니다.

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

int opened =0;

int pending =0;

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

opened++;

else pending++;

}

if (opened>0 && pending>0)

{

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

{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderSymbol() !=Symbol()) continue;

if(OrderMagicNumber()!=Magic) continue;

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL)

OrderDelete(OrderTicket());

}

} [/PHP]

[PHP] extern int Magic = 68415;

extern int Orario_Inizio = 0;

extern int Orario_Fine = 6;

extern int Buffer = 0;

extern double Lotti = 0.1;

extern int TakeProfit = 10;

extern int StopLoss = 50;

double Massimo;

double Minimo;

int BarCount;

int BarStart;

int BarShift;

double MinLot;

double LotSize;

int i;

int ticket;

string Status;

string BuyStatus1;

string SellStatus1;

double Range;

string CommentoRange;

double pipMultiplier = 1;

int init()

{

}

int start()

{

if (Digits==3 || Digits==5)

{pipMultiplier = 10;}

else {pipMultiplier = 1; }

double TakeProfit1 = TakeProfit*Point*pipMultiplier;

double StopLoss1 = StopLoss*Point*pipMultiplier;

double Buffer1 = Buffer*Point*pipMultiplier;

double StopLossPrice = NormalizeDouble(StopLoss1,Digits);

double TakeProfitPrice = NormalizeDouble(TakeProfit1,Digits);

double BufferPrice = NormalizeDouble(Buffer1,Digits);

//CALCOLA LE BARRE DEL RANGE

if(Orario_Inizio>Orario_Fine)

{

BarCount=24+Orario_Fine-Orario_Inizio;

}

if(Orario_Inizio<Orario_Fine)

{

BarCount=Orario_Fine-Orario_Inizio;

}

//CALCOLA IL MASSIMO E IL MINIMO DEL RANGE

if(Hour()>=Orario_Fine)

{

BarStart=Hour()-Orario_Fine;

BarShift=BarStart+BarCount;

Minimo=iLow(NULL,PERIOD_H1,BarStart);

Massimo=0;

for(i=BarStart;i<=BarShift;i++)

{

Massimo=MathMax(Massimo,iHigh(NULL,PERIOD_H1,i));

Minimo=MathMin(Minimo,iLow(NULL,PERIOD_H1,i));

Range=(Massimo-Minimo)/Point;

}

}

else

{

Massimo=0;

Minimo=0;

return(0);

}

//CONTROLLA SE E' L'ORARIO PER POTER TRADARE

if(Hour()==Orario_Fine && OrdersTotal()<2)

{

//CONTROLLA SE IL MASSIMO E' STATO ROTTO. CONDIZIONE BUY

double OpenPriceBuy = NormalizeDouble((Massimo+BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lotti,OpenPriceBuy,0,OpenPriceBuy-StopLossPrice,OpenPriceBuy+TakeProfitPrice,NULL,Magic,0,Blue);

//CONTROLLA SE IL MINIMO E' STATO ROTTO. CONDIZIONE SELL

double OpenPriceSell = NormalizeDouble((Minimo-BufferPrice),Digits);

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lotti,OpenPriceSell,0,OpenPriceSell+StopLossPrice,OpenPriceSell-TakeProfitPrice,NULL,Magic,0,Red);

if (ticket != -1)

return(0);

}

}

누군가 도울 수 있습니까?

 

다시오

전체 코드를 start() 프로시저의 시작 부분에 배치해 보십시오. 보류 중인 주문 을 열 때 더 많은 방법을 필터링해야 할 것입니다. 그러나 시작할 때 해당 코드를 배치하면 이전에 열린 보류 중인 주문 중 하나라도 "일반" 주문인 경우 보류 중인 주문이 정리됩니다.

dasio:
누군가 도울 수 있습니까?
 

안녕,

저는 이 스레드에서 많은 것을 배우고 있습니다. 그것이 제가 계속 질문을 하는 이유입니다.

지금. 혼자 하려고 하지만 성공하지 못합니다.

오프라인 renko 차트에서 이 지표를 사용하고 싶습니다.

내 목적은 촛불 위 또는 아래에 플롯하는 것입니다. 건설은 얼마나 오래 되었습니까?

그래서 나는 양초의 사양에 그것이 열린 시간이 있다는 것을 알고 있습니다. 따라서 현재 양초에서 이전 양초를 뺀 시간을 하면 필요한 것을 갖게 됩니다.

그럼 어떻게 코딩할 수 있을까요?

매우 감사합니다

 

이 코드가 마감된 주문을 수정하려는 이유를 알 수 없음

나는 ordermodify 함수 오류에 대한 이 유효하지 않은 티켓에 종지부를 찍을 것이라고 생각하는 두 if 문에 OrderCloseTime()을 추가했지만 때때로 내 EA는 모든 주문에 대한 제어를 잃고 어떻게든 닫힌 거래에서 혼합되고 지속적으로 수정하려고 합니다. 계속해서 거대한 로그 파일을 만들고 MT4를 다시 시작하지 않는 한 거래를 계속하지 않을 것입니다. 마감된 주문을 어떻게 선택하는지 정확히 모르겠습니다. 모든 주문을 수정하는 과정에서 그 중 하나가 짧은 시간에 마감되어 폐기되는 것 같습니다. 내가 말했듯이 이것은 하루에 30-50 거래 중 두 번 발생할 것입니다.

누구든지 이것을 끝내는 방법에 대한 아이디어가 있습니까?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

신호 문제

믈라덴

이제 코드가 작동합니다. 감사합니다. 경고가 더 이상 반복되지 않습니다. 수백 명과 같은 여러 수신자에게 거래 경고를 보낼 스크립트를 호스팅하고 싶습니다. 어떻게 할 수 있습니까...회사가 있습니까? 귀하 또는 이 포럼의 모든 사람이 알고 있는 것을 처리할 수 있습니다.

Mastercash:
Mladen 감사합니다. 자세히 봤습니다.... 아직 코드를 실험 중입니다.완료되면 알려드리겠습니다.
 

...

2개의 생각:

1. 당신이 그것을 보낼 생각이라면 메일을 보내는 것이 유일한 합리적인 방법이라고 생각합니다. 그렇다면 단순히 야생에 있는 이메일 스팸 프로그램 중 하나를 사용하지 않겠습니까?

2. 신호를 보내는 데 문제가 너무 많습니다(제 생각에는 보내는 문제 중 일부는 실제로 해결할 수 없음). 따라서 논리를 뒤집지 않는 이유는 무엇입니까? 보내는 대신 지정된 위치에서 읽을 코드(사용자 이름, 전달 등 ...)를 만들면 보내는 데 발생할 수 있는 거의 모든 문제가 발생합니다. 미해결, 해결 (여러 IP 동시 사용 방지 포함)

그래서, 단지 몇 가지 생각 ...

Mastercash:
mladen 감사합니다. 코드가 작동 중입니다.경고가 더 이상 반복되지 않습니다.수백 명과 같은 여러 수신자에게 거래 경보를 보낼 스크립트를 호스팅하고 싶습니다. 어떻게 할 수 있습니까...있습니까? 귀하 또는 이 포럼의 모든 사람이 알고 있는 것을 처리할 수 있는 회사.
 

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

#include

#define PAUSE_BEFORE_RETRY 1000

#define NumberOfReTries 3

if (NewOrdersPlaced_s3 && flag_s3 == TRUE)

{

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--)

{

if (!OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES)) continue;

if (OrderSymbol() != Symbol()) continue;

if (OrderMagicNumber() != MagicNumber_3) continue;

for (int retry=0; retry<NumberOfReTries; retry++)

{

OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

int error = GetLastError();

switch (error)

{

case ERR_SERVER_BUSY:

case ERR_NO_CONNECTION:

case ERR_INVALID_PRICE:

case ERR_OFF_QUOTES:

case ERR_BROKER_BUSY:

case ERR_TRADE_CONTEXT_BUSY:

Sleep(PAUSE_BEFORE_RETRY);

continue;

case ERR_PRICE_CHANGED:

case ERR_REQUOTE:

continue;

default:

retry=NumberOfReTries;

}

}

NewOrdersPlaced_s3 = FALSE;

}

}
beakon:
나는 ordermodify 함수 오류에 대한 이 유효하지 않은 티켓에 종지부를 찍을 것이라고 생각하는 두 if 문에 OrderCloseTime()을 추가했지만 때때로 내 EA는 모든 주문에 대한 제어를 잃고 어떻게든 닫힌 거래에서 혼합되고 지속적으로 수정하려고 합니다. 계속해서 거대한 로그 파일을 만들고 MT4를 다시 시작하지 않는 한 거래를 계속하지 않을 것입니다. 마감된 주문을 어떻게 선택하는지 정확히 모르겠습니다. 모든 주문을 수정하는 과정에서 그 중 하나가 짧은 시간에 마감되어 폐기되는 것 같습니다. 내가 말했듯이 이것은 하루에 30-50 거래 중 두 번 발생할 것입니다.

누구든지 이것을 끝내는 방법에 대한 아이디어가 있습니까?

if (NewOrdersPlaced_s3) {

if (flag_s3 == TRUE) {

for (cnt_s3 = OrdersTotal() - 1; cnt_s3 >= 0; cnt_s3--) {

OrderSelect(cnt_s3, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber_3 || OrderCloseTime()!=0) continue;

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber_3 && OrderCloseTime()==0)// OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow);

//===

while(!OrderModify(OrderTicket(), AveragePrice_s3, OrderStopLoss(), PriceTarget_s3, 0, Yellow))

{Sleep(1000);RefreshRates();}

//===

NewOrdersPlaced_s3 = FALSE;

}

}
 

경보 솔루션

이에 대해 더 많은 설명이 필요한 것 같습니다. 모든 클라이언트에게 동시에 경고를 보내는 데 도움이 되는 코드를 작성하고 설정하는 방법에 대해 힌트를 주실 수 있습니까? 데이터베이스에 이메일 주소를 저장하는 것입니다. ....하지만 서버 언어(예: php 스크립트)가 mt4 플랫폼에서 자동으로 경고를 수집하는 방법은 무엇입니까?......이것이 문제라고 생각합니다. 방법이 있으면 다음으로 보낼 수 있습니다. 여러 대의 휴대전화나 이메일 주소입니다. 조언 부탁드립니다.

mladen:
2개의 생각:

1. 당신이 그것을 보낼 생각이라면 메일을 보내는 것이 유일한 합리적인 방법이라고 생각합니다. 그렇다면 단순히 야생에 있는 이메일 스팸 프로그램 중 하나를 사용하지 않겠습니까?

2. 신호를 보내는 데 문제가 너무 많습니다(제 생각에는 보내는 문제 중 일부는 실제로 해결할 수 없음). 따라서 논리를 뒤집지 않는 이유는 무엇입니까? 보내는 대신 지정된 위치에서 읽을 코드(사용자 이름, 전달 등 ...)를 만들면 보내는 데 발생할 수 있는 거의 모든 문제가 발생합니다. 미해결, 해결 (여러 IP 동시 사용 방지 포함)

그래서, 단지 몇 가지 생각 ...
 

마스터캐시

"대량 이메일 보내기"로 인터넷 검색을 해보면 답을 찾을 수 있을 거라 생각합니다.

"경보 수집" 현재: 신호를 배포하거나 해당 신호에 대한 액세스를 허용하는 선택한 소프트웨어에서 인식할 읽을 수 있는 형식으로 " 내보내는 " 무언가가 있어야 합니다.

추신: 신호 서비스는 얼핏 보기보다 훨씬 더 복잡하며 하나 만들 계획이라면 제대로 작동하도록 하는 데 상당한 비용이 소요될 수 있습니다.

Mastercash:
이에 대해 더 많은 설명이 필요한 것 같습니다. 모든 클라이언트에게 동시에 경고를 보내는 데 도움이 되는 코드를 작성하고 설정하는 방법에 대해 힌트를 주실 수 있습니까? 데이터베이스에 이메일 주소를 저장하는 것입니다. ....하지만 서버 언어(예: php 스크립트)가 mt4 플랫폼에서 자동으로 경고를 수집하는 방법은 무엇입니까?......이것이 문제라고 생각합니다. 방법이 있으면 다음으로 보낼 수 있습니다. 여러 대의 휴대전화나 이메일 주소입니다. 조언 부탁드립니다.