¿Cómo puedo saber si he descompuesto o no? - página 12

 
Andrey F. Zelinsky:

¿por qué en el foro 4? -- está aquí ahora -- tanto en el mercado como en el freelance.

He aquí un ejemplo de su código en la base de código https://www.mql5.com/ru/code/9835

Kim escribió en todas sus funciones:

Pero si se mira el código de los "hacedores", los derechos de autor de Kim se frotan por ahí.

¿Dónde están los ponentes de derechos humanos aquí?

Ahí es donde realmente se violan los derechos de autor.

Las funciones de esa plantilla fueron tomadas directamente de Igor. Lo único que hizo fue cambiar el nombre y quitar el copyright de Igor en la cabecera. Al mismo tiempo, en lugar de los derechos de autor de Igor, inserté descaradamente los míos:

string Autor=" Автор функции для шаблона : www.expforex.at.ua";

Una clara apropiación indebida de méritos ajenos y una violación de la autoría de Igor, sustituyéndola por la suya propia.

 
Artyom Trishkin:

Las funciones de esa plantilla están tomadas limpiamente de Igor. Sólo he cambiado el nombre y he eliminado el copyright de Igor en la cabecera. Los derechos de autor de Igor se sustituyen por los suyos:

Apropiación indebida inequívoca del crédito de otra persona e infracción de la autoría de Igor al sustituirla por la suya.

Me pregunto por qué IC no elimina su código de la base de código.

Porque la infracción de los derechos de autor es evidente y fácil de comprobar. El código de Kim es de libre acceso.

¿Por qué no se plantean estos problemas de infracción de los derechos de autor?

Aquí están las condiciones de uso https://www.mql5.com/ru/about/terms:

3.9. Usted se compromete a no reproducir, copiar, vender, intercambiar o revender el contenido de www.mql5.com. La única excepción es si un acuerdo separado con MQL5 Ltd permite lo contrario. Si usted hace copias de cualquier Contenido, todos los derechos de autor y otros avisos de propiedad contenidos en los materiales originales deben ser conservados en dichas copias. Usted no puede modificar el Contenido ni mostrarlo públicamente, reproducirlo o distribuirlo. El sitio web mql5.com es propiedad de MQL5 Ltd. Los sitios web de MQL5 Ltd están protegidos por las leyes internacionales de derechos de autor. Cualquier uso no autorizado de los sitios web de MQL5 Ltd puede violar los derechos de autor, la marca registrada y otras leyes.

Una infracción clara, inequívoca, deliberada, grave y cínica... e impune.
 

Función de Igor SetOrder()

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.03.2008                                                     |
//|  Описание : Установка ордера.                                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  color    clOpen;
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl;
  string   lsComm=WindowExpertName()+" "+GetNameTF(Period());

  if (sy=="" || sy=="0") sy=Symbol();
  msl=MarketInfo(sy, MODE_STOPLEVEL);
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, ex, clOpen);
    if (ticket>0) {
      if (UseSound) PlaySound(NameFileSound); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      // Неправильные стопы
      if (err==130) {
        switch (op) {
          case OP_BUYLIMIT:
            if (pp>pa-msl*mp) pp=pa-msl*mp;
            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
            break;
          case OP_BUYSTOP:
            if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
            if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
            if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
            break;
          case OP_SELLLIMIT:
            if (pp<pb+msl*mp) pp=pb+msl*mp;
            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
            break;
          case OP_SELLSTOP:
            if (pp>pb-msl*mp) pp=pb-msl*mp;
            if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
            if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
            break;
        }
        Print("SetOrder(): Скорректированы ценовые уровни");
      }
      Print("Error(",err,") set order: ",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 (pa==0 && pb==0) Message("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Слишком частые запросы (8) или слишком много запросов (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Ожидание освобождения подсистемы торговли
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Обнуление даты истечения
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
}
//+----------------------------------------------------------------------------+

La función de un caballero que se apropia de lo ajeno:

//+------------------------------------------------------------------+
//|              Установка отложенного ордера                        |
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
int SetOrder(string sy,int op,double ll,double pp,
             double sl=0,double tp=0,int mn=0,datetime ex=0,string lsComm="")
  {
   color    clOpen;
   datetime ot;
   double   pa,pb,mp;
   int      err,it,ticket,msl;
   string Autor=" Автор функции для шаблона : www.expforex.at.ua";

   if(sy=="" || sy=="0") sy=Symbol();
   msl=MarketInfo(sy,MODE_STOPLEVEL);
   if(ex>0 && ex<TimeCurrent()) ex=0;
   for(it=1; it<=5; it++)
     {
      if(!IsTesting() && (!IsExpertEnabled() || IsStopped()))
        {
         Print("SetOrder(): Остановка работы функции");
         break;
        }
      while(!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      ot=TimeCurrent();
      if(!MarketWatch)ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,NormalizeDouble(sl,MarketInfo(sy,MODE_DIGITS)),NormalizeDouble(tp,MarketInfo(sy,MODE_DIGITS)),lsComm,mn,ex,clOpen);
      if(MarketWatch)

        {
         ticket=OrderSend(sy,op,ll,NormalizeDouble(pp,MarketInfo(sy,MODE_DIGITS)),Slippage,0,0,lsComm,mn,ex,clOpen);
         if(SBT(ticket)) ModifyOrder(-1,sl,tp);
        }

      if(ticket>0)
        {

         return(ticket);
         break;
           } else {
         err=GetLastError();
         if(err==128 || err==142 || err==143)
           {
            Sleep(1000*66);

            continue;
           }
         mp=MarketInfo(sy, MODE_POINT);
         pa=MarketInfo(sy, MODE_ASK);
         pb=MarketInfo(sy, MODE_BID);
         if(pa==0 && pb==0) Comment("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
         // Неправильные стопы
         if(err==130)
           {
            switch(op)
              {
               case OP_BUYLIMIT:
                  if(pp>pa-msl*mp) pp=pa-msl*mp;
                  if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
                  if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
                  break;
               case OP_BUYSTOP:
                  if(pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
                  if(sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
                  if(tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
                  break;
               case OP_SELLLIMIT:
                  if(pp<pb+msl*mp) pp=pb+msl*mp;
                  if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
                  if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
                  break;
               case OP_SELLSTOP:
                  if(pp>pb-msl*mp) pp=pb-msl*mp;
                  if(sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
                  if(tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
                  break;
              }
            Print("SetOrder(): Скорректированы ценовые уровни"+sy+"--op-"+op+"--ll-"+ll+"--pp-"+pp+"---"+Slippage+"--sl-"+sl+"--tp-"+tp+"---"+lsComm+"---"+mn+"---"+ex+"---"+clOpen);
           }
         // Блокировка работы советника
         if(err==2 || err==64 || err==65 || err==133)
           {
            break;
           }
         // Длительная пауза
         if(err==4 || err==131 || err==132)
           {
            Sleep(1000*300); break;
           }
         // Слишком частые запросы (8) или слишком много запросов (141)
         if(err==8 || err==141) Sleep(1000*100);
         if(err==139 || err==140 || err==148) break;
         // Ожидание освобождения подсистемы торговли
         if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
         // Обнуление даты истечения
         if(err==147)
           {
            ex=0; continue;
           }
         if(err!=135 && err!=138) Sleep(1000*7.7);
        }
     }
  }
//+------------------------------------------------------------------+

Y dime que no lo asignó porque cambió un par de líneas...

Puedo dar tantos ejemplos de apropiación indebida de la obra de Igor como quiera.

 
Artyom Trishkin:

Función de Igor SetOrder()

La función del apropiador indebido:

Y dime que no lo asignó porque cambió un par de líneas...

Bueno, te equivocas -- en el de Kim dice "fijar orden" -- y en el suyodice "fijar orden pendiente" -- ¿notas la diferencia?

 
Andrey F. Zelinsky:
No, bueno, te equivocas... el de Kim dice "fijar orden"... y el suyodice "fijar orden pendiente"... ¿no notas la diferencia? ¿No notas la inestimable contribución al código de Kim?
Oh, hombre... Qué pena...
 

Por cierto, al código de Kim no sólo se le ha quitado el copyright, sino que se le ha añadido su propia autoría:

string Autor=" Автор функции для шаблона : www.expforex.at.ua";

Si miras su código en la base de código, la anulación de la autoría de Kim a su propia autoría está presente en cada función de Kim.

Por ejemplo https://www.mql5.com/ru/code/9835 .

 

Pregunta para un concurso: ¿Qué es el derecho de autor?

1

//|                  Copyright 2015, Urain |

2

#property copyright "Copyright 2015, Urain"

¿La primera o la segunda? ¿O ambas?

 
Andrey F. Zelinsky:

Por cierto, al código de Kim no sólo se le ha quitado el copyright, sino que se le ha añadido su propia autoría:

Si miras su código en la base de código, la anulación de la autoría de Kim a su propia autoría está presente en cada función de Kim.

Por ejemplo https://www.mql5.com/ru/code/9835 .

Bueno, eso es lo que he dicho. Igor incluso tiene su autoría en cada función en todas sus bibliotecas. Incluso en aquellas bibliotecas que no son de dominio público, sino de uso comercial.
 
Ese es uno de los puntos fundamentales: no conoces la cocina, pero intentas convertirte en chef de inmediato

¿Qué te hace pensar que no lo sé? No participo en servicios freelance, pero a veces escribo código por encargo. Este es un ejemplo de acusación irreflexiva))

No lo he hecho, pero no puedo saberlo con seguridad. He visto códigos de buenos amigos míos que se han hecho pasar por suyos, cambiando la cabecera en el código fuente, y dejando el resto del código "tal cual". Incluso se discutió en nuestro foro. En el cuarto foro, una persona tergiversó el código de Igor Kim como si fuera suyo. Insolentemente y sin miramientos. Código fuente. Esto es despreciable, vil y bajo.

Ese es uno de los puntos fundamentales: no conoces la cocina, pero intentas convertirte en chef.

No creas que estoy a favor de las descompilaciones, no, estoy definitivamente en contra. Pero hay que ver las circunstancias. O piensas que cualquiera que te ofrezca un código es un ladrón, o piensas antes de acusar.

No, no puedo. Pero tampoco se puede demostrar que un cliente gane dinero por romper el código de otro. ¿O es que se ha abolido la presunción de inocencia? Así que será mejor que pruebes la culpabilidad primero.

De lo contrario, te mostraré un código que parece descompilado - te convertirás en un ladrón por haber visto este código.

Estoy en contra de cualquier tipo de descompilación en cualquiera de sus formas, una vez más me sorprende la cantidad de programadores que no se cortan a la hora de ensuciarse el culo por un céntimo.

¿Qué hay que demostrar? El hecho es en la cara de descompilación en el estudio, y no conocer las reglas no exime de responsabilidad.

 
Nikolay Demko:

Pregunta para un concurso: ¿Qué es el derecho de autor?

1

2

¿La primera o la segunda? ¿O ambas?

¿Qué te parece?

Por ejemplo, ¿la autoría?

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.03.2008                                                     |
//|  Описание : Возвращает флаг существования ордеров.                         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любой ордер)                    |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время установки)          |
//+----------------------------------------------------------------------------+
bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal(), ty;
 
  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ty=OrderType();
      if (ty>1 && ty<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (ot<=OrderOpenTime()) return(True);
          }
        }
      }
    }
  }
  return(False);
}