Sürekli olayların sayısını hesaplamak için (örneğin, kapanışın açılıştan daha yüksek olduğu bir dizideki çubukların sayısı ve bunun tersi), sadece şunu düşünebildim:
İki soru (yukarıdakiler mantıklıysa): (1) sürekli seri durmuşsa sayacın nasıl sıfırlanacağı; ve (2) Tampon[i] nasıl düzgün yazılır - yani. Sonucun kendisini nasıl "görebilirsin"?
Yani, belirli bir çubuğun göstergesi "-3" gösteriyorsa, bu, açıklığın altında kapanan bir satırdaki üçüncü çubuk olduğu anlamına gelir; onu takip eden çubuk açıklığın üzerinde kapanırsa, gösterge "1" gösterecektir......
extern string sNameExpert = "Gordago'dan Oluştur"; harici int nHesap =0; harici çift dBuyStopLossPoint = 0; harici çift dSellStopLossPoint = 0; harici çift dBuyTakeProfitPoint = 0; harici çift dSellTakeProfitPoint = 0; harici çift dBuyTrailingStopPoint = 0; harici çift dSellTrailingStopPoint = 0; harici çift Parti = 0.10; extern int nSlippage = 30; extern bool lFlagUseHourTrade = True; harici int nFromHourTrade = 0; harici int nToHourTrade = 23; extern bool lFlagUseSound = Yanlış; harici dize sSoundFileName = "alert.wav"; dış renk colorOpenBuy = Mavi; dış renk rengiCloseBuy = Aqua; dış renk colorOpenSell = Kırmızı; dış renk rengiKapatSat = Aqua;
geçersiz tanım() { Yorum(""); }
//+------------------------------------------- --------------------+ //| | //+------------------------------------------- --------------------+ int start(){ if (lFlagUseHourTrade){ if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) { Comment("Ticaret zamanı daha gelmedi!"); dönüş(0); } }
if(çubuk < 100){ Print("100'den küçük barlar"); dönüş(0); }
if (nHesap > 0 && nHesap != HesapNumarası()){ Comment("Hesapta işlem :"+HesapNumarası()+" YASAK!"); dönüş(0); }
çift diOpen0=iOpen(NULL,60,0); çift d1=(0.00030); double diHigh2=iHigh(NULL,60,0); çift diOpen3=iOpen(NULL,60,0); çift d4=(0.00030); double diLow5=iLow(NULL,60,0); double diOpen6=iOpen(NULL,60,1); double diClose7=iClose(NULL,60,1); double diOpen8=iOpen(NULL,60,2); double diClose9=iClose(NULL,60,2); çift diOpen10=iOpen(NULL,60,0); çift d11=(0.00030); double diHigh12=iHigh(NULL,60,0); çift diOpen13=iOpen(NULL,60,0); çift d14=(0.00030); double diLow15=iLow(NULL,60,0); çift diOpen16=iOpen(NULL,60,1); double diClose17=iClose(NULL,60,1); double diOpen18=iOpen(NULL,60,2); double diClose19=iClose(NULL,60,2);
//+------------------------------------------- ------------------------------+ //| Yazar : Kim Igor V. namı diğer KimIV, http://www.kimiv.ru | //+------------------------------------------- ------------------------------+ //| Sürüm : 02/19/2008 | //| Açıklama : Son konum kaybı bayrağını döndürür. | //+------------------------------------------- ------------------------------+ //| Seçenekler: | //| sy - enstrüman adı ("" - herhangi bir sembol, | //| NULL - geçerli karakter) | //| operasyon - operasyon (-1 - herhangi bir pozisyon) | //| mn - MagicNumber (-1 - herhangi bir büyü) | //+------------------------------------------- ------------------------------+ bool isLossLastPos(string sy="", int op=-1, int mn=-1) { tarihsaat t; int i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==dk) { if (t<SiparişKapatZamanı()) { t=SiparişKapatZamanı(); j=i; } } } } } } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { if (OrderProfit()<0) return(True); } dönüş(yanlış); }
if (OrderStopLoss()<pp-(TStop.Buy+TrailingStep-1)*po||OrderStopLoss()==0)
üzerinde
if (OrderStopLoss()>pp-(TStop.Buy+TrailingStep-1)*po||OrderStopLoss()==0)
Roger, teşekkürler, ama yine de doğru çalışmıyor. Başka bir izi sabitlemeye çalıştım, ancak hata hala devam ediyor :( Aynı anda bir poz ve birkaç poz için iz herhangi bir şeyde farklılık gösteriyor mu?
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
Çapa açısı - bu, nesnenin penceredeki konumunun hesaplanacağı açıdır. Açılar saat yönünde soldan sağa doğru sayılır.
Sağ alt köşeye yapışırsam, o zaman ne, negatif koordinatlar mı ayarlayacağım?
Sağ alt köşeye yapışırsam, o zaman ne, negatif koordinatlar mı ayarlayacağım?
Söylemek,
Sürekli olayların sayısını hesaplamak için (örneğin, kapanışın açılıştan daha yüksek olduğu bir dizideki çubukların sayısı ve bunun tersi), sadece şunu düşünebildim:
İki soru (yukarıdakiler mantıklıysa): (1) sürekli seri durmuşsa sayacın nasıl sıfırlanacağı; ve (2) Tampon[i] nasıl düzgün yazılır - yani. Sonucun kendisini nasıl "görebilirsin"?
Yani, belirli bir çubuğun göstergesi "-3" gösteriyorsa, bu, açıklığın altında kapanan bir satırdaki üçüncü çubuk olduğu anlamına gelir; onu takip eden çubuk açıklığın üzerinde kapanırsa, gösterge "1" gösterecektir......
int i=Barlar-1
while (i > 0) {
intx=0;
int y=0;
if ( Kapat[i] > Aç[i] ) { x++ ;
Buf[i]=x; }
if (Kapat[i] < Aç[i] ) { y-- ;
Buf2[i]=y; }
ben--;
}
Hayır, pozitif koordinatlar, terminal istenen noktayı kendisi hesaplayacaktır. Örneğin: 2 köşeden 15 piksel
Tahmin etmek zorunda kalmamak için kodunuzu gösterin
Martin ilavesiyle Gorando programında yapılmıştır.
//+------------------------------------------- --------------------+
//| Telif Hakkı 2005 Gordago Yazılım A.Ş. |
//| http://www.gordago.com/ |
//| sürüm 2.0 |
//+------------------------------------------- --------------------+
#property telif hakkı "Telif hakkı 2005, Gordago Software Corp."
#özellik bağlantısı "http://www.gordago.com"
#define MIN_STOPLOSS_POINT 10
#define MIN_TAKEPROFIT_POINT 10
#define MAGIC 218650
extern string sNameExpert = "Gordago'dan Oluştur";
harici int nHesap =0;
harici çift dBuyStopLossPoint = 0;
harici çift dSellStopLossPoint = 0;
harici çift dBuyTakeProfitPoint = 0;
harici çift dSellTakeProfitPoint = 0;
harici çift dBuyTrailingStopPoint = 0;
harici çift dSellTrailingStopPoint = 0;
harici çift Parti = 0.10;
extern int nSlippage = 30;
extern bool lFlagUseHourTrade = True;
harici int nFromHourTrade = 0;
harici int nToHourTrade = 23;
extern bool lFlagUseSound = Yanlış;
harici dize sSoundFileName = "alert.wav";
dış renk colorOpenBuy = Mavi;
dış renk rengiCloseBuy = Aqua;
dış renk colorOpenSell = Kırmızı;
dış renk rengiKapatSat = Aqua;
geçersiz tanım() {
Yorum("");
}
//+------------------------------------------- --------------------+
//| |
//+------------------------------------------- --------------------+
int start(){
if (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("Ticaret zamanı daha gelmedi!");
dönüş(0);
}
}
if(çubuk < 100){
Print("100'den küçük barlar");
dönüş(0);
}
if (nHesap > 0 && nHesap != HesapNumarası()){
Comment("Hesapta işlem :"+HesapNumarası()+" YASAK!");
dönüş(0);
}
if((dBuyStopLossPoint > 0 && dBuyStopLossPoint < MIN_STOPLOSS_POINT) ||
(dSellStopLossPoint > 0 && dSellStopLossPoint < MIN_STOPLOSS_POINT)){
Print("StopLoss daha az " + MIN_STOPLOSS_POINT);
dönüş(0);
}
if((dBuyTakeProfitPoint > 0 && dBuyTakeProfitPoint < MIN_TAKEPROFIT_POINT) ||
(dSellTakeProfitPoint > 0 && dSellTakeProfitPoint < MIN_TAKEPROFIT_POINT)){
Print("TakeProfit az " + MIN_TAKEPROFIT_POINT);
dönüş(0);
}
çift diOpen0=iOpen(NULL,60,0);
çift d1=(0.00030);
double diHigh2=iHigh(NULL,60,0);
çift diOpen3=iOpen(NULL,60,0);
çift d4=(0.00030);
double diLow5=iLow(NULL,60,0);
double diOpen6=iOpen(NULL,60,1);
double diClose7=iClose(NULL,60,1);
double diOpen8=iOpen(NULL,60,2);
double diClose9=iClose(NULL,60,2);
çift diOpen10=iOpen(NULL,60,0);
çift d11=(0.00030);
double diHigh12=iHigh(NULL,60,0);
çift diOpen13=iOpen(NULL,60,0);
çift d14=(0.00030);
double diLow15=iLow(NULL,60,0);
çift diOpen16=iOpen(NULL,60,1);
double diClose17=iClose(NULL,60,1);
double diOpen18=iOpen(NULL,60,2);
double diClose19=iClose(NULL,60,2);
if(AccountFreeMargin() < (1000*Lot)){
Print("Paramız yok. Serbest Marj = " + AccountFreeMargin());
dönüş(0);
}
bool lFlagBuyOpen = false, lFlagSellOpen = false, lFlagBuyClose = false, lFlagSellClose = false;
lFlagBuyOpen = (diOpen0+d1>diHigh2 && diOpen3-d4<diLow5 && diOpen6<diClose7 && diOpen8>diClose9);
lFlagSellOpen = (diOpen10+d11>diHigh12 && diOpen13-d14<diLow15 && diOpen16>diClose17 && diOpen18<diClose19);
lFlagBuyClose = Yanlış;
lFlagSellClose = Yanlış;
if (!ExistPositions()){
if (lFlagBuyOpen){
açık satın();
dönüş(0);
}
if (lFlagSellOpen){
OpenSell();
dönüş(0);
}
}
if (ExistPositions()){
if(OrderType()==OP_BUY){
if (lFlagBuyClose){
bool flagCloseBuy = OrderClose(OrderTicket(), OrderLots(), Bid, nSlippage, colorCloseBuy);
if (flagCloseBuy && lFlagUseSound)
PlaySound(sSoundFileName);
dönüş(0);
}
}
if(OrderType()==OP_SEL){
if (lFlagSellClose){
bool flagCloseSell = OrderClose(OrderTicket(), OrderLots(), Ask, nSlippage, colorCloseSell);
if (flagCloseSell && lFlagUseSound)
PlaySound(sSoundFileName);
dönüş(0);
}
}
}
if (dBuyTrailingStopPoint > 0 || dSellTrailingStopPoint > 0){
for (int i=0; i<SiparişlerToplam(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
bool lMagic = doğru;
if (MAGIC > 0 && OrderMagicNumber() != MAGIC)
sihir=yanlış;
if (OrderSymbol()==Symbol() && lMagic) {
if (OrderType()==OP_BUY && dBuyTrailingStopPoint > 0) {
if (Bid-OrderOpenPrice() > dBuyTrailingStopPoint*Point) {
if (OrderStopLoss()<Bid-dBuyTrailingStopPoint*Point)
ModifyStopLoss(Bid-dBuyTrailingStopPoint*Puan);
}
}
if (OrderType()==OP_SELL) {
if (OrderOpenPrice()-Ask>dSellTrailingStopPoint*Nokta) {
if (OrderStopLoss()>Ask+dSellTrailingStopPoint*Point || OrderStopLoss()==0)
ModifyStopLoss(Sor+dSellTrailingStopPoint*Nokta);
}
}
}
}
}
}
dönüş(0);
}
bool ExistPositions() {
for (int i=0; i<SiparişlerToplam(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
bool lMagic = doğru;
if (MAGIC > 0 && OrderMagicNumber() != MAGIC)
sihir=yanlış;
if (OrderSymbol()==Symbol() && lMagic) {
dönüş(Doğru);
}
}
}
dönüş(yanlış);
}
void ModifyStopLoss(çift ldStopLoss) {
bool lFlagModify = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 0, CLR_NONE);
if (lFlagModify && lFlagUseSound)
PlaySound(sSoundFileName);
}
//+------------------------------------------- ------------------------------+
//| Yazar : Kim Igor V. namı diğer KimIV, http://www.kimiv.ru |
//+------------------------------------------- ------------------------------+
//| Sürüm : 02/19/2008 |
//| Açıklama : Son konum kaybı bayrağını döndürür. |
//+------------------------------------------- ------------------------------+
//| Seçenekler: |
//| sy - enstrüman adı ("" - herhangi bir sembol, |
//| NULL - geçerli karakter) |
//| operasyon - operasyon (-1 - herhangi bir pozisyon) |
//| mn - MagicNumber (-1 - herhangi bir büyü) |
//+------------------------------------------- ------------------------------+
bool isLossLastPos(string sy="", int op=-1, int mn=-1) {
tarihsaat t;
int i, j=-1, k=OrdersHistoryTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==dk) {
if (t<SiparişKapatZamanı()) {
t=SiparişKapatZamanı();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderProfit()<0) return(True);
}
dönüş(yanlış);
}
geçersiz OpenBuy() {
çift dStopLoss = 0, dTakeProfit = 0;
double Lots_New = Lot;
if (isLossLastPos(NULL, -1, MAGIC))
Çok_Yeni *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Çok;
eğer (dBuyStopLossPoint > 0)
dStopLoss = Teklif-dBuyStopLossPoint*Puan;
if (dBuyTakeProfitPoint > 0)
dTakeProfit = Teklif + dBuyTakeProfitPoint * Puan;
int numorder = OrderSend(Symbol(), OP_BUY, Lots_New, Ask, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy);
if (sayı > -1 && lFlagUseSound)
PlaySound(sSoundFileName);
}
geçersiz OpenSell() {
çift dStopLoss = 0, dTakeProfit = 0;
double Lots_New = Lot;
if (isLossLastPos(NULL, -1, MAGIC))
Çok_Yeni *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))
Lots_New = Çok;
if (dSellStopLossPoint > 0)
dStopLoss = Sor+dSellStopLossPoint*Puan;
if (dSellTakeProfitPoint > 0)
dTakeProfit = Ask-dSellTakeProfitPoint*Puan;
int numorder = OrderSend(Symbol(),OP_SELL, Lots_New, Bid, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell);
if (sayı > -1 && lFlagUseSound)
PlaySound(sSoundFileName);
}
Örnekte zor değilse, gerektiği gibi düzeltin, nedense yapamıyorum
Köşe değişkenini harici yaptım (kolaylık olması için). Koordinatların hesaplanacağı açının numarasını içerir.
değiştirmeyi dene
if (OrderStopLoss()<pp-(TStop.Buy+TrailingStep-1)*po||OrderStopLoss()==0)
üzerinde
if (OrderStopLoss()>pp-(TStop.Buy+TrailingStep-1)*po||OrderStopLoss()==0)
Köşe değişkenini harici yaptım (kolaylık olması için). Koordinatların hesaplanacağı açının numarasını içerir.
Teşekkür ederim!
Bir soru daha. Wingdings'ten yorumlara bir sembol nasıl doğru bir şekilde eklenir?
ne sembolü?
telif hakkı