Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
https://www.mql5.com/ru/forum/97557/page4#comment_2891988
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
OrderSend ile MT5'te nasıl düzgün çalışılır
fxsaber , 2016.11.14 20:20
Bu, betiklerle ilgili bir sorundur.Üzgünüz, ama senaryolarınızla uğraşma arzusu yok
Katma
Ama bir çıkış yolu var
OrderrSend() işlevi eşzamanlı olduğundan, bir sipariş aldıktan sonra,
OnTradeTransaction() içinde geçmişin senkronize edildiğinden emin olun
// Expert TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction &trans,
const MqlTradeRequest &request,
const MqlTradeResult &result)
{
switch (trans.type)
{
case TRADE_TRANSACTION_ORDER_UPDATE :
switch (trans.order_state)
{
case ORDER_STATE_PLACED :
if (order_ticket==trans.order)
{
Print ( __FUNCTION__ , " Order plased done. Ticket = " ,trans.order);
if (order_ticket> 0 )
{
if ( OrderSelect (order_ticket))
{
//Ордер синхронизирован с историей
}
else
{
Print ( __FUNCTION__ , " Order not select! Ticket = " ,trans.order);
}
}
else
{
Print ( __FUNCTION__ , " Wrong order ticket = " ,trans.order);
}
}
break ;
}
break ;
}
}
Ve dans etmek yok!
Ve dans etmek yok!
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
OrderSend ile MT5'te nasıl düzgün çalışılır
fxsaber , 2016.11.10 10:00
Bunun bir komut dosyası olduğunu ve herhangi bir Event olamayacağını unutmayın . Tek çıkış yolu aptal uyku.
Bu betiği SB kullanarak yeniden yazarsanız hiçbir şey değişmez.
Uykuyu dilediğin gibi saptırabilirsin....
Neden kendilerinin önerdiklerini ve daha önce başkaları tarafından dile getirilenleri tekrarlasınlar?
Konu, OnTradeTransaction ile ilgili olası sorunlar hakkında her şeyi söylüyor. Özellikle, aynı anda birkaç danışmanın çalışması hakkında.
İnsanlar koltuk değneği yapar - bu, belgeleri bilmedikleri ve özellikleri nasıl kullanacaklarını bilmedikleri anlamına gelmez.
OnTrade ve OnTradeTransaction tam olarak yaptıkları şeydir. Ve doğduğunda, geliştiriciler hesapta birden fazla danışmanla aynı anda çalışmanın aptallık olduğuna inanıyorlardı.
Eh, kiminle olmadığı bu puanda yanıldılar.
Aşağıdaki işlevi bir EA'ya yazmayı deneyin
Neden kendilerinin önerdiklerini ve daha önce başkaları tarafından dile getirilenleri tekrarlasınlar?
Konu, OnTradeTransaction ile ilgili olası sorunlar hakkında her şeyi söylüyor. Özellikle, aynı anda birkaç danışmanın çalışması hakkında.
İnsanlar koltuk değneği yapar - bu, belgeleri bilmedikleri ve özellikleri nasıl kullanacaklarını bilmedikleri anlamına gelmez.
OnTrade ve OnTradeTransaction tam olarak yaptıkları şeydir. Ve doğduğunda, geliştiriciler hesapta birden fazla danışmanla aynı anda çalışmanın aptallık olduğuna inanıyorlardı.
Eh, kiminle olmadığı bu puanda yanıldılar.
Aşağıdaki işlevi bir EA'ya yazmayı deneyin
Şu anda, gerçek hayatta (bir terminalde) çalışan 41 Uzman Danışmanım var, bu da toplamda bir işlem günü için
2000 sipariş açık ve kapalı pozisyon ayarla ve HİÇBİR zorluk yaşamıyorum!
Katma
"Bu şekilde ihtiyacım var" dan değil, işlevsellikten ilerlemek gerekiyor.
Geliştiriciler, mümkünse, istekleri dikkate alarak hataları düzeltir ve eksiklikleri giderir
kullanıcılar (çok yavaş olsa da).
Görünüşe göre OederSend () yakında çözülecek.
Şu anda, gerçek hayatta (bir terminalde) çalışan 41 Uzman Danışmanım var, bu da toplamda bir işlem günü için
2000 sipariş açık ve kapalı pozisyon ayarla ve HİÇBİR zorluk yaşamıyorum!
Konu dışına çıkmak denir.
En basit mantığa bile gelince
Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum
OrderSend ile MT5'te nasıl düzgün çalışılır
fxsaber , 2016.11.15 13:30
Aşağıdaki işlevi bir EA'ya yazmayı deneyin
#property strict
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
void Func( const string &Symbols[] )
{
const int Total = ArraySize (Symbols);
for ( int i = 0 ; i < Total; i++)
{
const double Price = SymbolInfoDouble (Symbols[i], SYMBOL_ASK );
const int digits = ( int ) SymbolInfoInteger (Symbols[i], SYMBOL_DIGITS );
if (! OrderSelect ( OrderSend (Symbols[i], OP_BUY , 1 , Price, 100 , 0 , 0 , DoubleToString (Price, digits)), SELECT_BY_TICKET ) ||
( NormalizeDouble (Price - OrderOpenPrice (), digits) != 0 )) // если не получилось открыть или есть проскальзывание - выходим
break ;
}
}
void OnStart () // OnTick
{
const string Symbols[] = { "EURUSD" , "GBPUSD" , "AUDUSD" , "USDCAD" , "USDJPY" };
Func(Symbols);
}
Ve birisi geliştiricilerden cennet gibi mana bekliyor.
Dilediğiniz gibi sapıklık yapma hakkınız olduğunu daha önce söylemiştim (herkesin bu hakkı vardır).
Dilediğiniz gibi sapıklık hakkınız olduğunu daha önce söylemiştim (herkesin bu hakkı vardır).
uzun zaman önceydi, ama bu adamı hatırlıyorum, şey, bu - fxsaber harikalar yarattı,
şimdiye kadar, kodları MT4 kod tabanında, WinInet aracılığıyla siteleri okuma kodunda saklanmaktadır.
bugüne kadar birçok programcı tarafından kullanılan...
ve bu nedenle, bana öyle geliyor ki, o sapık değil ...
const bool IsTester = (:: MQLInfoInteger ( MQL_TESTER ) || :: MQLInfoInteger ( MQL_OPTIMIZATION ) ||
:: MQLInfoInteger ( MQL_VISUAL_MODE ) || :: MQLInfoInteger ( MQL_FRAME_MODE ));
bool Waiting( const bool FlagInit = false )
{
static ulong StartTime = 0 ;
if (FlagInit)
StartTime = :: GetMicrosecondCount ();
const bool Res = (:: GetMicrosecondCount () - StartTime < OrderSend_MaxPause);
if (Res)
:: Sleep ( 0 );
return (Res);
}
bool EqualPrices( const double Price1, const double Price2, const int digits)
{
return (:: NormalizeDouble (Price1 - Price2, digits) == 0 );
}
#define WHILE(A) while (!(Res = (A)) && Waiting())
bool OrderSendSync ( const MqlTradeRequest &Request, MqlTradeResult &Result )
{
bool Res = :: OrderSend (Request, Result);
if (Res && !IsTester && (Result.retcode < TRADE_RETCODE_ERROR ) && (OrderSend_MaxPause > 0 ))
{
Res = (Result.retcode == TRADE_RETCODE_DONE );
Waiting( true );
if (Request.action == TRADE_ACTION_DEAL )
{
WHILE(:: HistoryOrderSelect (Result.order))
;
Res = Res && ((( ENUM_ORDER_STATE ):: HistoryOrderGetInteger (Result.order, ORDER_STATE ) == ORDER_STATE_FILLED ) ||
(( ENUM_ORDER_STATE ):: HistoryOrderGetInteger (Result.order, ORDER_STATE ) == ORDER_STATE_PARTIAL ));
if (Res)
WHILE(:: HistoryDealSelect (Result.deal))
;
}
else if (Request.action == TRADE_ACTION_PENDING )
{
if (Res)
WHILE(:: OrderSelect (Result.order))
;
else
{
WHILE(:: HistoryOrderSelect (Result.order))
;
Res = false ;
}
}
else if (Request.action == TRADE_ACTION_SLTP )
{
if (Res)
{
bool EqualSL = false ;
bool EqualTP = false ;
const int digits = ( int ):: SymbolInfoInteger (Request.symbol, SYMBOL_DIGITS );
if ((Request.position == 0 ) ? :: PositionSelect (Request.symbol) : :: PositionSelectByTicket (Request.position))
{
EqualSL = EqualPrices(:: PositionGetDouble ( POSITION_SL ), Request.sl, digits);
EqualTP = EqualPrices(:: PositionGetDouble ( POSITION_TP ), Request.tp, digits);
}
WHILE((EqualSL && EqualTP))
if ((Request.position == 0 ) ? :: PositionSelect (Request.symbol) : :: PositionSelectByTicket (Request.position))
{
EqualSL = EqualPrices(:: PositionGetDouble ( POSITION_SL ), Request.sl, digits);
EqualTP = EqualPrices(:: PositionGetDouble ( POSITION_TP ), Request.tp, digits);
}
}
}
else if (Request.action == TRADE_ACTION_MODIFY )
{
if (Res)
{
bool EqualSL = false ;
bool EqualTP = false ;
const int digits = ( int ):: SymbolInfoInteger (Request.symbol, SYMBOL_DIGITS );
if (:: OrderSelect (Result.order))
{
EqualSL = EqualPrices(:: OrderGetDouble ( ORDER_SL ), Request.sl, digits);
EqualTP = EqualPrices(:: OrderGetDouble ( ORDER_TP ), Request.tp, digits);
}
WHILE((EqualSL && EqualTP))
if (:: OrderSelect (Result.order))
{
EqualSL = EqualPrices(:: OrderGetDouble ( ORDER_SL ), Request.sl, digits);
EqualTP = EqualPrices(:: OrderGetDouble ( ORDER_TP ), Request.tp, digits);
}
}
}
else if (Request.action == TRADE_ACTION_REMOVE )
if (Res)
WHILE(:: HistoryOrderSelect (Result.order))
;
}
return (Res);
}
#undef WHILE