Gerçek şu ki, bir siparişi kapatan OrderClose() işlevi, ilk parametre olarak sipariş numarasını alır ve sipariş numarası yalnızca OrderSelect() aracılığıyla mevcut siparişlere erişilerek elde edilebilir, bu nedenle genel durumda kapanış bir şey gibi görünür. bunun gibi..
OrdersTotal() = 0 ise, yani açık emir yoksa for döngüsü hemen biter..
Cevabınız için teşekkürler, ancak OrderSend fonksiyonunun başlangıcını yazabilir misiniz? son parantezlerden hemen sonra mı gelmeli????
Cevabınız için teşekkürler, ancak OrderSend fonksiyonunun başlangıcını yazabilir misiniz? son parantezlerden hemen sonra mı gelmeli????
işte bir örnek
#define OP_BALANCE 6int TRY =1;int TRADESLEEP =1000;int SLIPPAGE =3;int start (){
// ничего не делать
int action = OP_BALANCE ;if( isTime (Period()*60)){// закрываем ордера по текущему инструменту
closeAllOrdersBySymbol ( SLIPPAGE , TRY , TRADESLEEP );
// получаем условие покупать, продавать, ничего не делать
action = getAction ();if( action == OP_BALANCE )return(0);// для примера минимальный лот double lots =MarketInfo(Symbol(),MODE_MINLOT);//количество пунктов для стоплоса и текпрофита - сами определитеint slPoint =0, tpPoint =0;string сomment ="";// значение для комментария по умолчаниюint magicNumer =0;// значение по умолчанию// открываем позицию - while используется для того чтобы открывать позицию пока она не откроетсяwhile(! openOrder ( action , lots , slPoint , tpPoint , SLIPPAGE , сomment , magicNumer , TRY , TRADESLEEP )){}}return(0);}//+------------------------------------------------------------------+//| открывает позицию по рынку |//+------------------------------------------------------------------+int getAction (){int act = OP_BALANCE ;/* здесь нужно написать логику,
если что-то, то покупать act = OP_BUY;
если что-то, то продавать act = OP_SELL;
*/return( act );}//+------------------------------------------------------------------+//| открывает позицию по рынку |//+------------------------------------------------------------------+bool openOrder (int type ,double lots ,int slPoint ,int tpPoint ,int slippage ,string comment ,int magicNumer ,int try ,int tradeSleep ){bool res =false;int err =0;double price , tp =0, sl =0, ask =0, bid =0;color col =CLR_NONE;Comment("Открытие ордера...");while( try !=0){while(IsTradeContextBusy()||!IsTradeAllowed()){Comment("Торговый поток занят...");Sleep( tradeSleep );}RefreshRates();
ask =MarketInfo(Symbol(),MODE_ASK);
bid =MarketInfo(Symbol(),MODE_BID);if( type ==OP_BUY){
price = ask ; col =Red;if( slPoint >0) sl = bid - slPoint *Point;if( tpPoint >0) tp = ask + tpPoint *Point;}if( type ==OP_SELL){
price = bid ; col =Blue;if( slPoint >0) sl = ask + slPoint *Point;if( tpPoint >0) tp = bid - tpPoint *Point;}if( type ==OP_BUY&&AccountFreeMarginCheck(Symbol(),OP_BUY, lots )<=0||GetLastError()==134){Comment("Недостаточно свободных средств !");Sleep(2000);return( res );}if( type ==OP_SELL&&AccountFreeMarginCheck(Symbol(),OP_SELL, lots )<=0||GetLastError()==134){Comment("Недостаточно свободных средств !");Sleep(2000);return( res );}
res =OrderSend(Symbol(), type , lots , price , slippage , sl , tp , comment , magicNumer ,0, col );if( res !=-1){PlaySound("alert.wav");
try =0;Comment("Ордер открыт !");}else{
err =GetLastError();if( err >1) try =0;Comment("Ошибка - ", err );}Sleep(2000);}return( res );}//+------------------------------------------------------------------+//| закрытие одеров//+------------------------------------------------------------------+ bool closeAllOrdersBySymbol (int slippage ,int try ,int tradeSleep ){int k =OrdersTotal(), err , nextTry ;string msg ="";bool res =false;for(int i =0; i < k ; i ++){if(OrderSelect( i , SELECT_BY_POS , MODE_TRADES )&&OrderSymbol()==Symbol()){
nextTry = try ;while( nextTry !=0){while(IsTradeContextBusy()||!IsTradeAllowed()){Comment("Торговый поток занят ...");Sleep( tradeSleep );}
res =OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), slippage ,CLR_NONE);if( res ){
nextTry =0;
res =true;Comment("Ордер закрыт !");}else{if( err >1) nextTry =0;Comment("Ошибка - ", err );}}}}return( res );}//+------------------------------------------------------------------+ bool isTime (int sec ){bool res =false;staticdatetime time =0;double min =0;if(TimeCurrent()>= time ){
min =MathFloor( sec /60);if( min ==0) min =1.0;
time =iTime(NULL,PERIOD_H1,0)+(MathFloor(Minute()/ min )+1)* min *60;
res =true;}return( res );}
test cihazında, pozitif bir sonuç elde edebilirsiniz
sonuç, belirli bir düzeyde ve hangi düzeyde olursa olsun
pozitif veya negatif. Ve soruya
Eksi ile veya eksi olmadan seviye nasıl alınır,
Ne yazık ki, net bir ayrım yok.
Belki de ben hatalıyım..........
Soru, yeni başlayanın neyi BİLMEDİĞİNİ sormasıdır. Bu kod örneği, bir Uzman Danışmanın yapısını (doğru yapıyı) anlamak için kullanılır.
Ve bu kod parçasına yatırılan şey, KLASİK ticaret ilkesine göre inşa edilmiştir. Hem danışmanın kendisi hem de kod örnekleri, birisini kandırmak veya bir şeyi yakalamak amacıyla değil, ilkeleri incelemeye hizmet ediyor ....... Sorduğum şey net olmadığı anlamına geliyor. Sonuçta, tamamen teorik olarak ne ve nasıl olduğunu anlamak GEREKİR. Ve sonra yaratın, şekillendirin, icat edin ........
keekkenen 25.02.2009 11:34 1) Lütfen açıklayın, OrderSend (...) fonksiyonu int tipine sahip ve siz onu bool tipi olarak tanımlıyorsunuz ve bool tipinde -1 değeri yok, bu ne kadar doğru? ? 2) KimIV için pozisyon açma fonksiyonunda tekrarlama for(..) döngüsü ile, sizin için ise while(...) üzerinden yapılır. sizce hangi yol daha iyi?
1. bu bir hatadır.. bir sipariş açmanın başarı/başarısızlık değerini döndürmek için res olarak int bildirmeniz ve başka bir bool türü değişken eklemeniz gerekir..
2. Daha önce Igor'un OpenPosition() işlevinin uygulamalarından birini de kullandım, ancak daha sonra hataları yakalamayı ve bunlarla ilgili mesajları görüntülemeyi kolaylaştırmak için işlevi değiştirdim..
sonuç bir yapıydı
while( try !=0){// определение условий для открытыия позиции//..// открытие позициц
res =OrderSend(...);if( res >0){PlaySound("alert.wav");
try =0;Comment("Ордер открыт !");Sleep(2000);
ret =true;}else{/* блок определения ошибок и возврат
err - уровень критичности ошибки (0,1,2,3)
msg - описание ошибки (если showErrors = true)
уровни определяются по номеру ошибки
0-нет ошибки, 1-надо ждать и обновлять,
2-сделка бракуется,3-фатальная ошибка*/
ErrorBlock ( showErrors , err , msg );if( err >1) try =0;// в данном случае 2 и 3 критичныComment("Ошибка - ", msg );Sleep(2000);}}
İşlevinizde, doğru anlarsam , sürekli alıntılar varsa, o zaman Igor'un işlevinin aksine deneme sayısı sınırsız mı? Bu durumda herhangi bir kısıtlamaya gerek var mı?
Gerçek şu ki, bir siparişi kapatan OrderClose() işlevi, ilk parametre olarak sipariş numarasını alır ve sipariş numarası yalnızca OrderSelect() aracılığıyla mevcut siparişlere erişilerek elde edilebilir, bu nedenle genel durumda kapanış bir şey gibi görünür. bunun gibi..
OrdersTotal() = 0 ise, yani açık emir yoksa for döngüsü hemen biter..
Cevabınız için teşekkürler, ancak OrderSend fonksiyonunun başlangıcını yazabilir misiniz? son parantezlerden hemen sonra mı gelmeli????
Cevabınız için teşekkürler, ancak OrderSend fonksiyonunun başlangıcını yazabilir misiniz? son parantezlerden hemen sonra mı gelmeli????
işte bir örnek
Söylesene, hangi fonksiyon "Ticaret" sekmesinde gösterilen açık emirler için marj seviyesinin değerini (yüzde olarak) döndürür?
Yardımda listelenen işlevlerin hiçbiri bu değeri döndürmez.
HesapMarjı
HesapSerbestMarj
HesapSerbestMarjKontrol
HesapSerbestMarjModu
Damiani_Volt göstergesini kullanabilirsiniz.
İlginç şeyler, teşekkürler
işte burada
Sayesinde
Kızgın olduğumu nereden çıkardın?
sadece bunu açıklıyorum
herhangi bir eşitsizlik işareti almak ve sürmek
test cihazında, pozitif bir sonuç elde edebilirsiniz
sonuç, belirli bir düzeyde ve hangi düzeyde olursa olsun
pozitif veya negatif. Ve soruya
Eksi ile veya eksi olmadan seviye nasıl alınır,
Ne yazık ki, net bir ayrım yok.
Belki de ben hatalıyım..........
Soru, yeni başlayanın neyi BİLMEDİĞİNİ sormasıdır. Bu kod örneği, bir Uzman Danışmanın yapısını (doğru yapıyı) anlamak için kullanılır.
Ve bu kod parçasına yatırılan şey, KLASİK ticaret ilkesine göre inşa edilmiştir. Hem danışmanın kendisi hem de kod örnekleri, birisini kandırmak veya bir şeyi yakalamak amacıyla değil, ilkeleri incelemeye hizmet ediyor ....... Sorduğum şey net olmadığı anlamına geliyor. Sonuçta, tamamen teorik olarak ne ve nasıl olduğunu anlamak GEREKİR. Ve sonra yaratın, şekillendirin, icat edin ........
1. bu bir hatadır.. bir sipariş açmanın başarı/başarısızlık değerini döndürmek için res olarak int bildirmeniz ve başka bir bool türü değişken eklemeniz gerekir..
2. Daha önce Igor'un OpenPosition() işlevinin uygulamalarından birini de kullandım, ancak daha sonra hataları yakalamayı ve bunlarla ilgili mesajları görüntülemeyi kolaylaştırmak için işlevi değiştirdim..
sonuç bir yapıydı