Siparişi genellikle ayrı işlevlerde gönderirim. Bu yüzden bu anı optimize etmek istedim, böylece hem ertelemeleri hem de piyasa emirlerini tek bir fonksiyonla göndermek mümkün olacaktı.
Bunu uygulamanın en iyi yolunu söyleyebilir misiniz?
Nitekim, bekleyen emir gönderirken, yukarıda (aşağıda) Alış (Bida) açılış fiyatını sırasıyla kontrol etmeniz ve bazı noktaları daha dikkate almanız gerekir.
Başkalarına benziyorum.. Kim'den en basit seçeneği alalım:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 21.03.2008 |//| Описание : Открывает позицию и возвращает её тикет. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| op - операция |//| ll - лот |//| sl - уровень стоп |//| tp - уровень тейк |//| mn - MagicNumber |//+----------------------------------------------------------------------------+int OpenPosition( string sy, int op, double ll, double sl= 0 , double tp= 0 , int mn= 0 ) {
color clOpen;
datetime ot;
double pp, pa, pb;
int dg, err, it, ticket= 0 ;
string lsComm=WindowExpertName()+ " " +GetNameTF( Period ());
if (sy== "" || sy== "0" ) sy= Symbol ();
if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell;
for (it= 1 ; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped ())) {
Print ( "OpenPosition(): Остановка работы функции" );
break ;
}
while (!IsTradeAllowed()) Sleep ( 5000 );
RefreshRates();
dg=MarketInfo(sy, MODE_DIGITS);
pa=MarketInfo(sy, MODE_ASK);
pb=MarketInfo(sy, MODE_BID);
if (op==OP_BUY) pp=pa; else pp=pb;
pp= NormalizeDouble (pp, dg);
ot= TimeCurrent ();
ticket= OrderSend (sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0 , clOpen);
if (ticket> 0 ) {
if (UseSound) PlaySound (NameFileSound); break ;
} else {
err= GetLastError ();
if (pa== 0 && pb== 0 ) Message( "Проверьте в Обзоре рынка наличие символа " +sy);
// Вывод сообщения об ошибкеPrint ( "Error(" ,err, ") opening position: " ,ErrorDescription(err), ", try " ,it);
Print ( "Ask=" ,pa, " Bid=" ,pb, " sy=" ,sy, " ll=" ,ll, " op=" ,GetNameOP(op),
" pp=" ,pp, " sl=" ,sl, " tp=" ,tp, " mn=" ,mn);
// Блокировка работы советникаif (err== 2 || err== 64 || err== 65 || err== 133 ) {
gbDisabled=True; break ;
}
// Длительная паузаif (err== 4 || err== 131 || err== 132 ) {
Sleep ( 1000 * 300 ); break ;
}
if (err== 128 || err== 142 || err== 143 ) {
Sleep ( 1000 * 66.666 );
if (ExistPositions(sy, op, mn, ot)) {
if (UseSound) PlaySound (NameFileSound); break ;
}
}
if (err== 140 || err== 148 || err== 4110 || err== 4111 ) break ;
if (err== 141 ) Sleep ( 1000 * 100 );
if (err== 145 ) Sleep ( 1000 * 17 );
if (err== 146 ) while (IsTradeContextBusy()) Sleep ( 1000 * 11 );
if (err!= 135 ) Sleep ( 1000 * 7.7 );
}
}
return (ticket);
}
Hiçbir şeyi kontrol etmiyor. İşlevinin sadece piyasa emirlerini açmaya yönelik olduğu görülebilir.
Bence mantıklı değil. Gönderilirse, herhangi bir türden bir sipariş. Düşündüğüm gibi yazarsanız, ilk bakışta çok uzun çıkacaktır.
Genel olarak, bu anları nasıl daha iyi uygulayabileceğiniz konusunda yardım ve ipuçları istiyorum.
Siparişi genellikle ayrı işlevlerde gönderirim. Bu yüzden bu anı optimize etmek istedim, böylece hem ertelemeleri hem de piyasa emirlerini tek bir fonksiyonla göndermek mümkün olacaktı.
Bunu uygulamanın en iyi yolunu söyleyebilir misiniz?
Sonuçta, bekleyen emir gönderirken, yukarıda (aşağıda) Sor (Bida) açılış fiyatını sırasıyla kontrol etmeniz ve bazı noktaları daha hesaba katmanız gerekir.
Başkalarına benziyorum.. Kim'den en basit seçeneği alalım:
Hiçbir şeyi kontrol etmiyor. İşlevinin sadece piyasa emirlerini açmaya yönelik olduğu görülebilir.
Bence mantıklı değil. Gönderilirse, herhangi bir türden bir sipariş. Düşündüğüm gibi yazarsanız, ilk bakışta çok uzun çıkacaktır.
Genel olarak, bu anları nasıl daha iyi uygulayabileceğiniz konusunda yardım ve ipuçları istiyorum.
Eh, Igor'un işlevi tam olarak bu işlevin adına yansıyan görevi yerine getiriyor. Bu fonksiyon çağrılmadan ÖNCE tüm ayarlar ve kontroller yapılmalıdır. Sonuçta, işlevin kendisi yalnızca kendisine atanan görevi yapar - kendisine iletilen parametrelerle (işleve) bir konum açar ve daha fazlasını yapmaz. Bunu gerekli hata işleme ile güzelce yapar. Eksik olan - kendiniz düzeltin.
Benzetme ile: bir mağazada hazır kahve satın aldığınızda, kaynar su ve şeker ve diğer malzemelerin otomatik olarak karıştırılması teklif edilmez - kendiniz için nasıl kahve yapacağınızı daha iyi bilirsiniz.
Siparişi genellikle ayrı işlevlerde gönderirim. Bu yüzden bu anı optimize etmek istedim, böylece hem ertelemeleri hem de piyasa emirlerini tek bir fonksiyonla göndermek mümkün olacaktı.
Bunu uygulamanın en iyi yolunu söyleyebilir misiniz?
Nitekim, bekleyen emir gönderirken, yukarıda (aşağıda) Alış (Bida) açılış fiyatını sırasıyla kontrol etmeniz ve bazı noktaları daha dikkate almanız gerekir.
Başkalarına benziyorum.. Kim'den en basit seçeneği alalım:
Hiçbir şeyi kontrol etmiyor. İşlevinin sadece piyasa emirlerini açmaya yönelik olduğu görülebilir.
Bence mantıklı değil. Gönderilirse, herhangi bir türden bir sipariş. Düşündüğüm gibi yazarsanız, ilk bakışta çok uzun çıkacaktır.
Genel olarak, bu anları nasıl daha iyi uygulayabileceğiniz konusunda yardım ve ipuçları istiyorum.
Siparişi genellikle ayrı işlevlerde gönderirim. Bu yüzden bu anı optimize etmek istedim, böylece hem ertelemeleri hem de piyasa emirlerini tek bir fonksiyonla göndermek mümkün olacaktı.
Bunu uygulamanın en iyi yolunu söyleyebilir misiniz?
Sonuçta, bekleyen emir gönderirken, yukarıda (aşağıda) Sor (Bida) açılış fiyatını sırasıyla kontrol etmeniz ve bazı noktaları daha hesaba katmanız gerekir.
Başkalarına benziyorum.. Kim'den en basit seçeneği alalım:
Hiçbir şeyi kontrol etmiyor. İşlevinin sadece piyasa emirlerini açmaya yönelik olduğu görülebilir.
Bence mantıklı değil. Gönderilirse, herhangi bir türden bir sipariş. Düşündüğüm gibi yazarsanız, ilk bakışta çok uzun çıkacaktır.
Genel olarak, bu anları nasıl daha iyi uygulayabileceğiniz konusunda yardım ve ipuçları istiyorum.
Eh, Igor'un işlevi tam olarak bu işlevin adına yansıyan görevi yerine getiriyor. Bu fonksiyon çağrılmadan ÖNCE tüm ayarlar ve kontroller yapılmalıdır. Sonuçta, işlevin kendisi yalnızca kendisine atanan görevi yapar - kendisine iletilen parametrelerle (işleve) bir konum açar ve daha fazlasını yapmaz. Bunu gerekli hata işleme ile güzelce yapar. Eksik olan - kendiniz düzeltin.
Benzetme ile: bir mağazada hazır kahve satın aldığınızda, kaynar su ve şeker ve diğer malzemelerin otomatik olarak karıştırılması teklif edilmez - kendiniz için nasıl kahve yapacağınızı daha iyi bilirsiniz.
Millet, mümkün mü ... Lütfen farklı bir döngü koşulu altında yeniden yazın ...
Yani harika bir bbands_stop göstergesi var:
for (shift=Nbars-Length-1;shift>=0;shift--)
{
smax[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_UPPER,shift);
smin[shift]=iBands(NULL,0,Length,Deviation,0,PRICE_CLOSE,MODE_LOWER,shift);
if (Close[shift]>smax[shift+1]) trend=1;
if (Close[shift]<smin[shift+1]) trend=-1;
bsmax[shift]=smax[shift]+0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);
bsmin[shift]=smin[shift]-0.5*(MoneyRisk-1)*(smax[shift]-smin[shift]);
if (trend>0)
UpTrendBuffer[shift]=bsmin[shift];
else
DownTrendBuffer[shift]=bsmax[shift];
}
Ancak bir öncekinin sonuçlarına benzer bir kod da yazmak mümkün mü? Ama zaten döngünün altında:
for(i = 0; i <= limit; i++) {
Oturduğum ikinci gün aklıma gelmiyor...
TÜM PRUEVETS soru elbette aptalca, 1 pip'in 1 dolara mal olması için ne kadar lot büyüklüğüne ihtiyaç var
0.1
her zaman değil
Omuza göre...
0.1 kaldıraç ile 1:100
Bir noktanın değeri söz konusu olduğunda, kaldıraç önemsizdir.