Hangi tasarım doğru? - sayfa 5

 
valenok2003 :

Sonuç böyle bir komut dosyasıdır

Soru - Neden tüm siparişleri her zaman kapatmıyor? Örneğin art arda üç Satış açarım, sonra bir script ile kapatmaya çalışırım, bir veya iki veya hepsini kapatabilir. Sebebi ne?

Bir komut dosyasına mı ihtiyacınız var?

o zaman bir while döngüsü ifadesine ihtiyacınız yoktur, komut dosyaları zaten döngülü bir biçimde çalışır .

Senaryonun böyle bir şeye ihtiyacı var ...

Neden akıllı olun ve her şey kod tabanında uzun süredir yazıyor, bağlantıyı hatırlamasam da, işte tüm açık siparişleri kapatan bir komut dosyası.

 //+------------------------------------------------------------------+
//|                                               CloseAllOrders.mq4 |
//|                       Copyright © 2008, PRMQuotes Software Corp. |
//|                                           Jedimedic77@gmail.com  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, PRMQuotes Software Corp."
#property link       ""
//+------------------------------------------------------------------+
//| EX4 imports                                                      |
//+------------------------------------------------------------------+
#include <stdlib.mqh>
//+------------------------------------------------------------------+
//| global variables to program:                                     |
//+------------------------------------------------------------------+
double Price[ 2 ];
int     giSlippage;
bool    CloseOpenOrders = true;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
void start() {
   int iOrders= OrdersTotal ()- 1 , i;
  
   if (CloseOpenOrders) {
     for (i=iOrders; i>= 0 ; i--) {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES) && (OrderType()<=OP_SELL) && GetMarketInfo() && 
      !OrderClose(OrderTicket(),OrderLots(),Price[ 1 -OrderType()],giSlippage)) Print (OrderError());
    }
  }
}
//+------------------------------------------------------------------+
//| Function..: OrderError                                           |
//+------------------------------------------------------------------+
string OrderError() {
   int iError= GetLastError ();
   return ( StringConcatenate ( "Order:" ,OrderTicket(), " GetLastError()=" ,iError, " " ,ErrorDescription(iError)));
}
//+------------------------------------------------------------------+
//| Function..: GetMarketInfo                                        |
//+------------------------------------------------------------------+
bool GetMarketInfo() {
  RefreshRates();
  Price[ 0 ]=MarketInfo(OrderSymbol(),MODE_ASK);
  Price[ 1 ]=MarketInfo(OrderSymbol(),MODE_BID);
   double dPoint=MarketInfo(OrderSymbol(),MODE_POINT);
   if (dPoint== 0 ) return (false);
  giSlippage=(Price[ 0 ]-Price[ 1 ])/dPoint;
   return (Price[ 0 ]> 0.0 && Price[ 1 ]> 0.0 );
}
//+------------------------------------------------------------------+
 
valenok2003 :

Sonuç böyle bir komut dosyasıdır

Soru - Neden tüm siparişleri her zaman kapatmıyor? Örneğin art arda üç Satış açarım, sonra bir script ile kapatmaya çalışırım, bir veya iki veya hepsini kapatabilir. Sebebi ne?
Ve alıntılar kaç haneli?
 
khorosh :
Ve alıntılar kaç haneli?
beş
 
Martingeil :

Bir komut dosyasına mı ihtiyacınız var?

Tabii ki teşekkür ederim. Ancak hazır bir senaryoyu almak kolaydır. sebebinin ne olduğunu anlamak istiyorum.
 
Martingeil :

Bir komut dosyasına mı ihtiyacınız var?

o zaman bir while döngüsü ifadesine ihtiyacınız yoktur, komut dosyaları zaten döngülü bir biçimde çalışır .


Komut dosyası yalnızca bir kez çalışır. Orada kendi kendine döngü yoktur ve asla olmamıştır.

Valenok, genel olarak tüm siparişleri kapatmak için komut dosyasına mı ihtiyacınız var yoksa sadece bu sembole mi ihtiyacınız var? suçluları kaldırmak için?

 
Martingeil :

Bir komut dosyasına mı ihtiyacınız var?

o zaman bir while döngüsü ifadesine ihtiyacınız yoktur, komut dosyaları zaten döngülü bir biçimde çalışır .

Senaryonun böyle bir şeye ihtiyacı var ...

Neden akıllı olun ve her şey kod tabanında uzun süredir yazıyor, bağlantıyı hatırlamasam da, işte tüm açık siparişleri kapatan bir komut dosyası.

while kodunda sadece iş parçacığı meşgulken geciktirmek için.
 
Techno :

Komut dosyası yalnızca bir kez çalışır. Orada kendi kendine döngü yoktur ve asla olmamıştır.

Valenok, genel olarak tüm siparişleri kapatmak için komut dosyasına mı ihtiyacınız var yoksa sadece bu sembole mi ihtiyacınız var? suçluları kaldırmak için?

Evet haklısın ben öyle söylemedim kenelere aldırmadan söylemek istedim..
 
Techno :

Komut dosyası yalnızca bir kez çalışır. Orada kendi kendine döngü yoktur ve asla olmamıştır.

Valenok, genel olarak tüm siparişleri kapatmak için komut dosyasına mı ihtiyacınız var yoksa sadece bu sembole mi ihtiyacınız var? suçluları kaldırmak için?



Sadece açık siparişler, bir sembol. Ertelemelere dokunmuyoruz.

Şaka, kod tabanında eleştirilen kodun

 int start()
{
//----
  while ( OrdersTotal ()> 0 )
  {
    for ( int i= 0 ; i < OrdersTotal (); i++)                                                        
    {                                                                                          
      if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==true)
      {
        OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(), 5 );  
      }
    }
  }                                               
//----
   return ( 0 );
}

sorunsuz çalışıyor ve düzelmeye başladığımda sorunlar başladı.

not:

Hat hatası ile ilgili

 for ( int i= 0 ; i < OrdersTotal (); i++)

zaten her şeyi anladım

 
valenok2003 :



Sadece açık siparişler, bir sembol. Ertelemelere dokunmuyoruz.

Otlozhniks ile hemen ördek ve bırakın. Genel olarak.

 int start()
{
   for ( int i= OrdersTotal ()- 1 ;i>= 0 ;i--)
    {
     if ( OrderSelect (i,SELECT_BY_POS)&&OrderSymbol()== Symbol ())
       switch (OrderType())
         {
         case 0   : OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (Bid, Digits ), 5 ); break ;
         case 1   : OrderClose(OrderTicket(),OrderLots(), NormalizeDouble (Ask, Digits ), 5 ); break ;
         default : OrderDelete(OrderTicket()); break ;
         }
    }
        
}
 
Martingeil :
Evet haklısın ben öyle söylemedim kenelere aldırmadan söylemek istedim..


bunun farkındayım